Php có thể được sử dụng cho giao diện người dùng và giao diện người dùng không?

Ghi chú. Các ví dụ được sử dụng dưới đây được đơn giản hóa cao. Tôi đã tạo ra nó vì lợi ích của bài báo. Tất nhiên, bạn sẽ muốn cách tiếp cận của mình phức tạp hơn đối với một ví dụ kinh doanh thực tế

Ý tưởng về mẫu Backend-For-Frontend đến từ các kỹ sư phần mềm tại SoundCloud. Phil Calçado (một trong những người sáng tạo) đã đưa ra lời giải thích về kiến ​​trúc của mẫu, vì vậy bạn có thể xem tại đây

Tại sao mô hình BFF?

Hãy sử dụng một nghiên cứu điển hình

Giả sử bạn đang xây dựng một ứng dụng cho một công ty Bất động sản, ứng dụng này cho phép người dùng xem các bất động sản để bán và có thể đặt các cuộc hẹn hoặc điều gì đó tương tự

Mẫu tìm nạp dữ liệu là như vậy (giả sử bạn sử dụng mẫu MVC)

Tìm nạp thuộc tính từ cơ sở dữ liệu -> Mô hình tuần tự hóa dữ liệu -> Trình điều khiển thực hiện bất kỳ logic nào cần thiết -> Dữ liệu chuyển sang chế độ xem

Tôi đã tạo các bản phác thảo bằng Sketch. io

Tất nhiên, phương pháp này không phải là tốt nhất, đặc biệt khi làm việc với một nhóm và/hoặc một dự án lớn. Có quá nhiều sự phụ thuộc giữa cả hai đầu và ít mối quan tâm tách biệt

Một cách tiếp cận hiện đại hơn là biến phần phụ trợ thành tài nguyên API, với đầu ra dễ sử dụng (ví dụ: JSON), sau đó để nhóm giao diện người dùng chỉ cần tập trung vào việc sử dụng đầu ra dữ liệu API bằng cách nhấn vào các điểm cuối đã xác định

Một mô hình rất đơn giản của cách tiếp cận như vậy được mô tả dưới đây

Như bạn có thể thấy ở đây, các vai trò đã được xác định rõ ràng cho cả phần giao diện người dùng và phần phụ trợ. Nhóm phụ trợ chỉ tập trung vào phụ trợ và đảm bảo định dạng đầu ra phù hợp được gửi đi. Nhóm front-end biết điểm cuối nào cần đạt được và cách họ có thể sử dụng dữ liệu

Vấn đề

Bạn thấy đấy, rất nhiều nhóm phát triển dừng lại ở điểm này; . Tuy nhiên, điều mà một số người không xem xét là hạn chế mà nó mang lại. Chúng ta sẽ đi qua một vài trong số đó

Trước tiên, điều gì sẽ xảy ra nếu bạn có một ứng dụng dành cho thiết bị di động sử dụng cùng một API, nhưng không có kết quả giống như ứng dụng web?

Đối với web, chúng tôi có thể muốn sử dụng xác thực dựa trên phiên và sử dụng mã thông báo để xác thực di động. Hoặc chúng tôi có thể có một tính năng mà chúng tôi không muốn trong ứng dụng web, vì vậy chúng tôi muốn loại trừ tính năng đó khỏi chế độ xem web. Rất tiếc, chúng tôi thậm chí có thể quyết định dành sự đối xử đặc biệt cho những khách hàng thân thiết đã cài đặt ứng dụng. Luôn có lý do để đưa ra các kết quả khác nhau

Hạn chế thứ hai. nếu chúng tôi quyết định công khai API thì sao? . Với API trung tâm cho mọi giao diện người dùng, chúng tôi không có cách nào đơn giản để xác định tính năng nào sẽ cung cấp cho người tiêu dùng API nào

Để giải quyết vấn đề này, mô hình Backend-For-Frontend đã ra đời

Hãy tạo một số BFF

Trình diễn bởi Phil Calçado

Ý tưởng rất đơn giản — tạo Backend cho mọi Frontend

Bạn có một ứng dụng web muốn sử dụng API chính?

Bạn có giao diện Android/iOS cần API chính?

Và sau đó tạo mã nguồn API chính và lưu trữ nó trong một không gian độc lập, riêng biệt

Phần phụ trợ sẽ chịu trách nhiệm thực hiện các yêu cầu API chính và chuyển dữ liệu đến giao diện người dùng của bạn. Theo cách đó, bạn có quyền kiểm soát tuyệt đối đối với những gì mỗi giao diện trong hệ sinh thái API của bạn có quyền truy cập

Sử dụng ví dụ về Bất động sản, giả sử chúng tôi muốn đăng nhập qua web, nhưng đối với phần phụ trợ chính, chúng tôi phải sử dụng xác thực API. Chúng tôi sẽ tận dụng các phiên Laravel để lưu trữ mã thông báo và sử dụng chúng làm Tiêu đề xác thực

Làm thế nào nó hoạt động

Tên miền phụ trợ chính. http. //chính-phụ trợ. kiểm tra

Tên miền giao diện người dùng web. http. //giao diện web. kiểm tra

Miền phụ trợ web (BFF của chúng tôi). http. // phụ trợ. giao diện web. kiểm tra

Chúng tôi sẽ sử dụng Hộ chiếu để xác thực, (kiểm tra liên kết này để biết hướng dẫn nhanh về Hộ chiếu Laravel)

Mã đăng nhập được lưu trữ trong mã phụ trợ chính (http. //chính-phụ trợ. kiểm tra). Nó được minh họa dưới đây

Điều gì đã xảy ra ở đó thật đơn giản

  • Tạo Phương thức để gửi phản hồi;
  • Trong Phương thức đăng nhập, truy xuất dữ liệu yêu cầu, [bạn có thể thực hiện bất kỳ xác thực nào tại thời điểm này]
  • Xác thực dữ liệu đã truy xuất bằng Auth Facade do Laravel cung cấp, đảm bảo dữ liệu được phản ánh trong Mô hình người dùng và bảng 'người dùng'. Chỉ định nếu khác
  • Trả về phản hồi thành công trên các chi tiết chính xác hoặc phản hồi lỗi nếu không

Bạn có thể lưu trữ mã nguồn API chính này trong một máy chủ khác, không phụ thuộc vào mã sử dụng nó

Để xác thực bằng mã BFF (được lưu trữ tại http. // phụ trợ. giao diện web. kiểm tra), mã bên dưới có thể nằm trong tệp định tuyến BFF

Như bạn có thể quan sát, gói GuzzleHttpLaravel đang được sử dụng để gửi yêu cầu HTTP đến máy chủ phụ trợ chính của bạn

Nếu bạn có thể nhớ lại, (hoặc quay lại để kiểm tra), chương trình phụ trợ chính của bạn sẽ trả về một đầu ra JSON, với 2 mẩu thông tin; . 'Mã thông báo' rất quan trọng ở đây. Khi xác thực thành công trong máy chủ phụ trợ, nó sẽ gửi phản hồi thành công tới BFF của bạn, sau đó chuyển sang khối 'else' (vì phản hồi không bị lỗi()). Mã thông báo sau đó được truy xuất và chuyển vào phiên web của bạn và phản hồi được tạo cho http của bạn. //giao diện web. xem thử

Bây giờ bạn đã đăng nhập thành công, hãy đi sâu vào việc tạo yêu cầu tìm nạp thuộc tính

Giả sử, đây là mã để tìm nạp các thuộc tính từ cơ sở dữ liệu, được lưu trữ trong máy chủ phụ trợ chính của chúng tôi, http. //chính-phụ trợ. kiểm tra

Như bạn có thể thấy, tài nguyên được bảo vệ bởi phần mềm trung gian auth/api, điều đó có nghĩa là chúng tôi sẽ không nhận được bất kỳ dữ liệu nào nếu không có xác thực API. Hãy hiển thị mã thông báo API của chúng tôi và lấy dữ liệu từ mã nguồn BFF của chúng tôi

tuyến đường

bộ điều khiển

Điều này sẽ tổng hợp tất cả các điểm của tôi. Từ đoạn mã trên, tôi đã thực hiện một yêu cầu HTTP, sử dụng các phương thức 'withHeaders' và 'withToken' để đặt tiêu đề và mã thông báo API tương ứng. Giờ đây, nó có thể truy cập tài nguyên API và truy xuất danh sách dữ liệu. (Tìm hiểu thêm về cách tạo Laravel Http Requests tại đây)

Tại sao phải trải qua tất cả những điều này?

Chà, như tôi đã đề cập trước đó, nó giải quyết các hạn chế mà một API trực tiếp, được kết hợp mang lại. Với điều này, bạn có khả năng kiểm soát cách mọi ứng dụng khách tương tác với API của bạn. Bạn có thể công khai một phần dịch vụ của mình và giữ dữ liệu và tính năng đặc biệt của mình cho riêng mình. Bạn có thể cung cấp trải nghiệm tùy chỉnh cho giao diện web và thiết bị di động của mình. Tất cả tùy thuộc vào bạn và giao diện Backend-For-Frontend của bạn. Bạn có thể xây dựng một BFF tương tự cho giao diện Android của mình. Và một cái khác cho giao diện iOS của bạn

Làm cách nào để kết nối giao diện người dùng và mặt sau bằng PHP?

Bạn cần truy vấn dữ liệu của mình từ cơ sở dữ liệu hoặc từ một nơi khác trong PHP. Sau đó, bạn có thể lặp lại nó bằng PHP ở định dạng JSON. Trong bước thứ hai, bạn có thể sử dụng jQuery hoặc JavaScript đơn giản để thực hiện lệnh gọi Ajax tới tệp PHP này và tạo một thứ gì đó với nó. PHP (dữ liệu

PHP có tốt cho phụ trợ không?

PHP được thiết kế như một ngôn ngữ hoàn toàn tập trung vào phần phụ trợ nên nó có thể được tích hợp tốt với HTML, máy chủ tập trung và cơ sở dữ liệu cũng như . PHP chắc chắn là công cụ phù hợp khi bạn làm việc với một CMS như WordPress, Joomla, v.v.