Tôi đã thực hiện một dự án dựa trên symfony đang sử dụng API bên ngoài (JSON); những gì tôi đã làm là tạo ra một thư viện máy khách độc lập ("thư viện máy khách" - một phần mềm, gói soạn thảo), với tập thực thể riêng (POPOs); nó tích hợp với khung sử dụng các giao diện do Symfony cung cấp (ví dụ: chỉ bằng cách tạo nhà cung cấp người dùng tùy chỉnh ).
Máy khách thực hiện các cuộc gọi http "hậu trường" - điều này rất quan trọng đối với các khả năng thử nghiệm trong tương lai. Bạn không muốn phơi bày cách bạn giao tiếp với nguồn dữ liệu của mình và bạn cũng không muốn các bài kiểm tra của mình dựa vào api trực tiếp.
Giao diện thư viện máy khách (ví dụ như giao diện của nó):
class ApiClient {
/**
* @throws SomeApiException If credentials are invalid
* @return ApiUser
*/
public function authenticate($username, $password);
/**
* @return ApiUser
*/
public function findUserByEmail($email);
/**
* @throws SomeApiException If email is invalid
* @return void
*/
public function changeUserEmail(User $user, $newEmail);
}
Thư viện khách bên trong sử dụng Gujection để liên lạc và thành phần Bộ đệm bộ đệm để lưu kết quả. Ánh xạ giữa các đối tượng thực thể và json được tạo bởi những người lập bản đồ, một khi đã được viết - không thay đổi rất thường xuyên (hoặc sự kiện nào cả). Trong trường hợp này, tôi sẽ đề nghị sử dụng Trình tuần tự JMS để chuyển đổi tự động sang và từ JSON (Tôi giả sử rằng bạn sử dụng JSON).
Bạn sẽ cần một cơ chế lưu trữ tốt và bộ nhớ cục bộ, như Redis. Thực hiện cuộc gọi api trên mỗi yêu cầu ứng dụng sẽ giết chết máy chủ của bạn và làm chậm đáng kể ứng dụng của bạn. Điều rất quan trọng để hiểu làm thế nào http cache hoạt động. Nếu api của bạn không sử dụng các tiêu đề bộ đệm (hoặc sử dụng nó theo cách tối nghĩa), sẽ rất khó khăn và tốn tài nguyên để theo dõi các thay đổi.
Bạn cũng sẽ muốn nghĩ về cách ứng xử của khách hàng nếu kết nối bị ngắt - khách hàng có nên sử dụng dữ liệu bị đình trệ không? Sẽ là một ý tưởng tốt khi sử dụng một số máy chủ proxy giữa ứng dụng của bạn và API. Trong trường hợp này, proxy (như Varnish) có thể tăng tốc các yêu cầu của bạn và cũng làm mới dữ liệu bị đình trệ trong nền mà không làm chậm ứng dụng của bạn. Nó cũng sẽ giữ cho trang web của bạn trực tuyến trong trường hợp lỗi API. Bạn có thể không thể ghi dữ liệu trong thời gian này, nhưng người dùng của bạn vẫn có thể duyệt dữ liệu được lưu trong bộ nhớ cache.
Và nói về Học thuyết, xem " Luật của công cụ ".