Phương pháp giao tiếp tốt nhất giữa ứng dụng và trang web của bạn? PHP, dịch vụ web, v.v.


8

Tôi đang tạo một ứng dụng mà tôi muốn liên lạc với trang web của mình. Ứng dụng sẽ phải lấy dữ liệu cho một người dùng ứng dụng cụ thể từ cơ sở dữ liệu của trang web. Tôi không rõ là cách tốt nhất để làm điều này.

Tôi đã thấy một cách để làm điều này chẳng hạn là tạo một trang đăng nhập trên ứng dụng, sau đó nhấn logic login.php trên trang web của tôi. Điều này thuận tiện vì tôi có thể sử dụng một cơ sở mã để xử lý đăng nhập cho cả trang web và ứng dụng.

Một giải pháp khác tôi từng thấy là sử dụng các yêu cầu JSON để xử lý giao tiếp giữa ứng dụng và trang web. Điều này thuận tiện vì các đối tượng JSON dễ tạo và phân tích cú pháp.

Về cơ bản tôi muốn biết cách tốt nhất / phổ biến để có sự giao tiếp này xảy ra, những ưu và nhược điểm của việc có cái này hơn cái kia và bất kỳ vấn đề bảo mật nào khác cần xem xét.

Ví dụ: có nguy cơ lộ dữ liệu người dùng nhạy cảm khi sử dụng một phương pháp so với phương pháp khác không? Nếu vậy làm thế nào điều này có thể được ngăn chặn? Làm thế nào và ở đâu mã hóa và xác nhận người dùng đi vào hoạt động ở đây?


Cách phổ biến là tạo API. Xem các ví dụ về API của Google hoặc bất kỳ công ty lớn nào khác để có ý tưởng về cách chúng được thực hiện.
Arseni Mourzenko

Không có phương pháp 'tốt nhất', 'một kích cỡ phù hợp cho tất cả'. Thay vì cho chúng tôi biết các tùy chọn bạn đã thấy, hãy xác định rõ hơn cho chúng tôi các nhu cầu cụ thể cho ứng dụng của bạn. Tôi nghi ngờ khi bạn tập trung vào việc bạn sẽ thấy quyết định của mình dễ dàng hơn rất nhiều.
GrandmasterB

Ở cấp độ cơ bản nhất, tôi cần một cách để ứng dụng di động lấy thông tin từ cơ sở dữ liệu trang web của tôi. Người dùng sẽ có nhiều bit dữ liệu khác nhau, như các loại giao dịch khác nhau chẳng hạn. Tôi muốn có thể hiển thị cho người dùng của mình trên ứng dụng tất cả các giao dịch họ đã thực hiện trong tháng qua. Tôi cần phải thực hiện một truy vấn trên cơ sở dữ liệu của tôi cho điều đó. Tôi đã nghiêng nhiều hơn về PHP vì tôi có thể duy trì một cơ sở mã cho chức năng cơ bản này. Nhưng có một phương pháp tốt hơn, an toàn hơn để làm điều này? Có bất kỳ cạm bẫy / nguy hiểm rõ ràng nào tôi đang nhìn thấy?
edc598

2
@ edc598: Vui lòng không thêm nhận xét vào câu hỏi của bạn. Để làm rõ một câu hỏi, tốt nhất là cập nhật câu hỏi để đầy đủ và nhất quán.
S.Lott

Câu trả lời:


6

Tôi sẽ khuyên bạn nên xây dựng API REST cho ứng dụng và trang web của bạn.

Xây dựng một dịch vụ web là công việc nhiều hơn nhưng tôi nghĩ nó sạch hơn rất nhiều. Nếu bạn làm theo cách này, cả trang web và ứng dụng của bạn không phải lo lắng về cách kết nối và truy vấn cơ sở dữ liệu vì tất cả các chi tiết đó sẽ được API trừu tượng hóa. Ngoài ra, một lợi ích khác là bảo mật: nếu trang web của bạn bị tấn công, họ sẽ không nhất thiết phải truy cập vào cơ sở dữ liệu của bạn vì trang web chỉ thực hiện các cuộc gọi API (chứ không phải các cuộc gọi cơ sở dữ liệu.) Tất nhiên có rất nhiều điều cần xem xét với bảo mật, nhưng đó là một điều ít bạn phải lo lắng.

Dưới đây là một hướng dẫn khởi đầu tuyệt vời về cách tạo API REST trong PHP:

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/


Thích câu trả lời này là tốt nhất vì nó bao gồm một liên kết hữu ích. Mặc dù câu trả lời của mọi người đã cung cấp rất nhiều cái nhìn sâu sắc về chủ đề này. Cảm ơn!
edc598

liên kết đã chết ...
warmconemotel

1

Tùy thuộc vào mức độ phức tạp của các yêu cầu của bạn, các dịch vụ web REST / JSON hoặc SOAP.

Đối với các yêu cầu đơn giản, REST đơn giản hơn để hiểu và thực hiện, đặc biệt nếu bạn ưu tiên JSON hơn XML.

Tuy nhiên, nếu các yêu cầu của bạn bao gồm xác thực, xác minh thư, phát hiện, không thoái thác hoặc lược đồ thư phức tạp, bạn có thể tìm hiểu sâu hơn về sự phức tạp của SOAP vì gần như mọi vấn đề đều được đề cập. Mặc dù SOAP phức tạp và khó hiểu hơn nhưng nó xử lý gần như mọi hoán vị và biến thể kiến ​​trúc có thể có trong một hệ thống nhắn tin, ngoài ra, nó có một bộ công cụ rất hoàn thiện và toàn diện để giúp bạn vượt qua mê cung API. Nhưng nếu bạn không cần mức độ tinh vi này, hãy gắn bó với REST.


0

Nhược điểm lớn nhất của API là bạn phải chịu trách nhiệm thực hiện các yêu cầu JSON, chuyển đổi câu trả lời và hiển thị chúng trên trang trách nhiệm của trình duyệt. Không phải tất cả các trình duyệt có thể tùy thuộc vào điều này, về bản chất hoặc do người dùng đã tắt java-script.

Tuy nhiên, những lo ngại này đã giảm dần theo thời gian và hiện tại ảnh hưởng đến tương đối ít khách hàng. Tuy nhiên, có thể đáng để làm thêm để hỗ trợ tất cả các khách hàng.

Ưu điểm của API là việc tách logic API dễ dàng hơn nhiều so với các chi tiết của màn hình và việc truy cập trực tiếp API bằng các phương tiện khác ngoài trình duyệt (chẳng hạn như từ một ứng dụng khác) dễ dàng hơn nhiều. Điều này tự động làm cho việc kiểm tra API tách biệt với kiểm tra máy khách, điều này tốt.

Nó cũng phần nào an toàn hơn trước các cuộc tấn công tiêm trang (như tấn công kịch bản chéo trang) bởi vì việc phân tích và thoát JSON đúng cách dễ dàng hơn so với tài liệu HTML (có thể bao gồm các thẻ script chứa java-script). Điều này giả định rằng trên máy khách, bạn phân tích JSON bằng trình phân tích cú pháp JSON và không chỉ sử dụng một số dạng eval (), hoàn toàn không an toàn.

Một lợi thế khác có thể là bạn có thể loại bỏ lớp "khung web". Thay vì ASP, JSP, Django, Zend hoặc bất cứ điều gì, bạn thực sự chỉ cần một lớp mỏng để chuyển JSON qua lại từ máy khách của bạn đến máy chủ của bạn. Vì vậy, tối thiểu bạn có thể chuyển phần đó giữa các khung theo cách dễ dàng nếu bạn muốn. Điều đó có thể loại bỏ một phần di chuyển lớn từ ứng dụng của bạn.

Tôi nghĩ rằng mã hóa và xác nhận về cơ bản hoạt động theo cùng một cách. Tôi nghĩ rằng nếu bạn có API, bạn có khả năng nhớ không tin tưởng khách hàng hơn là bạn có trang web, vì có thể quên rằng những kẻ tấn công không cần sử dụng trình duyệt làm khách hàng nhưng có thể gửi cho bạn bất kỳ tiêu đề nào , tham số truy vấn và dữ liệu đăng họ muốn. Đây là một vấn đề tâm lý hơn là kỹ thuật, và có thể không áp dụng cho bạn.


1
Cảm ơn bạn đã trả lời của bạn rất tốt nghĩ ra. Tôi đang tìm cách chỉ hỗ trợ ứng dụng của riêng tôi. Tôi nghĩ có lẽ tạo ra các phương thức khác nhau trong PHP để thực hiện các truy vấn khác nhau cho dữ liệu người dùng là một ý tưởng tốt. Bạn nghĩ thế nào về ý tưởng này? Làm cách nào tôi có thể bảo mật liên lạc giữa các tập lệnh PHP và ứng dụng của mình? Tôi có thể sử dụng https không? Có bất cứ điều gì tôi đang xem? Một phương pháp dễ dàng hơn để truy vấn dữ liệu này có lẽ?
edc598

Tất cả mọi thứ tôi nói ngoại trừ một điều chỉ áp dụng cho việc hỗ trợ ứng dụng của riêng bạn. HTTPS là một câu hỏi riêng biệt, nhưng nó sẽ giúp bảo mật thông tin liên lạc nhưng không ngăn chặn kịch bản chéo trang hoặc các cuộc tấn công từ chính khách hàng của bạn. Tôi thực sự không biết 2 câu hỏi cuối cùng ở đây là gì.
psr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.