2014-10-04 19 views
13

Tôi đã thực hiện một số nghiên cứu và tôi đã nhận thấy rằng trong rất nhiều ví dụ về ứng dụng Symfony2/AngularJS, giao diện người dùng và phụ trợ được kết hợp; ví dụ, chế độ xem sử dụng Twig.Ứng dụng một trang - Giao diện người dùng độc lập với chương trình phụ trợ?

Tôi luôn nghĩ rằng có thể (và thực hành phổ biến) để tạo giao diện người dùng và phụ trợ riêng biệt và chỉ tham gia bằng API. Trong trường hợp đó nếu tôi muốn thay đổi một khung công tác PHP, tôi có thể thực hiện nó mà không gặp bất kỳ vấn đề gì và sẽ đủ để giữ API.

Vậy thực tiễn tốt nhất để thực hiện điều đó là gì? Nó sẽ là tuyệt vời nếu bạn có thể giải thích nó cho tôi và thậm chí còn lớn hơn nếu bạn chỉ cho tôi một liên kết để ví dụ tốt về github hoặc một cái gì đó.

+0

Bạn là chính xác, bạn chỉ mục phải là html duy nhất của bạn được tạo ra/giải thích bởi máy chủ. Phần còn lại của html, css, js của bạn là tĩnh và dữ liệu điểm cuối của bạn chỉ đơn giản là được chuyển dưới dạng JSON. – Dylan

+0

@ Dylan bạn cũng có thể tránh trả lại chỉ mục. Xem câu trả lời của tôi – Qualcuno

+0

Ngoài ra Symfony2/AngularJS có một vài lời khuyên mà có thể gây nhầm lẫn cho sự hiểu biết của bạn về nó. Những thứ như Twig và angular sẽ xung đột với cú pháp biến {{}}. Vì vậy, có rất nhiều hướng dẫn về vấn đề và nó không chính xác về thực hành tốt nhất hoặc bất cứ điều gì. – Dylan

Trả lời

14

Chúng tôi đã và đang phát triển một số dự án sử dụng cùng một cách tiếp cận. Không chỉ tôi nghĩ rằng nó không có bất kỳ "tác dụng phụ", nhưng giải pháp là rất thanh lịch quá. Chúng tôi thường tạo phụ trợ trong Node.js và nó chỉ là một máy chủ API (không nhất thiết phải tuân thủ hoàn toàn REST). Sau đó, chúng tôi tạo một ứng dụng web khác cho giao diện người dùng, được viết hoàn toàn bằng HTML5/JavaScript (có hoặc không có Angular.js). Máy chủ API không bao giờ trả về bất kỳ HTML nào, chỉ cần JSON! Thậm chí không phải là một cấu trúc chỉ mục.

Có rất nhiều lợi ích:

  • Mã này là rất sạch sẽ và thanh lịch. Giao tiếp giữa giao diện người dùng và chương trình phụ trợ theo các phương thức được chuẩn hóa. Máy chủ hiển thị một số API và khách hàng có thể sử dụng chúng một cách tự do.
  • Điều này giúp dễ dàng có các nhóm khác nhau cho giao diện người dùng và chương trình phụ trợ và chúng có thể hoạt động hoàn toàn tự do mà không ảnh hưởng lẫn nhau. Nhà thiết kế, thường có kỹ năng mã hóa giới hạn, cũng đánh giá cao điều này.
  • Giao diện người dùng chỉ là một ứng dụng HTML5 tĩnh, vì vậy nó có thể (và chúng tôi thường làm) dễ dàng được lưu trữ trên CDN. Điều này có nghĩa rằng các máy chủ của bạn sẽ không bao giờ phải lo lắng về nội dung tĩnh ở tất cả, và tải của họ là giảm, tiết kiệm tiền của bạn. Người dùng cũng hạnh phúc hơn, vì CDN thường rất nhanh cho họ.

Một số gợi ý rằng tôi có thể cung cấp cho bạn dựa trên kinh nghiệm của chúng tôi:

  • Vấn đề lớn nhất là với xác thực của người sử dụng. Nó không đặc biệt phức tạp, nhưng bạn có thể muốn triển khai xác thực bằng cách sử dụng các giao thức ví dụ như OAuth 2.0 để sử dụng nội bộ của bạn. Vì vậy, ứng dụng giao diện người dùng sẽ hoạt động như ứng dụng khách OAuth và nhận mã thông báo xác thực từ chương trình phụ trợ. Bạn cũng có thể cân nhắc việc di chuyển máy chủ xác thực (bằng OAuth) trên một tài nguyên riêng biệt khác từ máy chủ API.
  • Nếu bạn lưu trữ ứng dụng web trên tên máy chủ khác (ví dụ: CDN), bạn có thể cần phải xử lý CORS và có thể là JSONP.
  • Ngôn ngữ bạn viết phụ trợ không thực sự quan trọng. Chúng tôi đã làm điều đó trong PHP (bao gồm Laravel), mặc dù chúng tôi đã có kết quả tốt nhất với việc sử dụng Node.js. Đối với nút.js, chúng tôi công bố boilerplate on GitHub của chúng tôi, dựa trên RestifyJS

tôi hỏi một số câu hỏi trong quá khứ bạn có thể quan tâm đến:

+0

Cảm ơn bạn, tôi sẽ đọc những gì bạn cho tôi. Nhưng tôi có thêm một câu hỏi nữa. Có bất kỳ lý do nào đằng sau việc trộn Symfony2 và AngularJS không? Có lẽ nếu ai đó muốn sử dụng Angular chỉ trong một số phần của ứng dụng như pagination hoặc thêm ý kiến? – tdudzik

+0

Góc là mạnh mẽ hơn để tạo ra toàn bộ các ứng dụng web dựa trên MVC. Tôi không thấy lý do tại sao bạn nên giới hạn nó cho các thành phần cụ thể. Dù sao, sự lựa chọn là của bạn :) – Qualcuno

+0

với Symfony2 thì việc xây dựng một API là rất dễ dàng, và thực hiện nó trong AngularJS, vì vậy sự kết hợp của hai khung hình quái vật này rất hợp lý, nhưng giới hạn góc thành phần cụ thể thì không, bạn ' d hoàn thành công việc trong jQuery nhanh hơn nhiều. – dimention

Các vấn đề liên quan