Saya telah membuat proyek berbasis symfony yang menggunakan API eksternal (JSON); apa yang saya lakukan adalah membuat pustaka klien independen ("pustaka klien" - perangkat lunak, paket komposer), dengan kumpulan entitasnya sendiri (POPO); itu terintegrasi dengan kerangka kerja menggunakan antarmuka yang disediakan oleh Symfony (misalnya, dengan hanya membuat penyedia pengguna kustom ).
Klien membuat panggilan http "di belakang layar" - yang penting untuk kemampuan pengujian di masa depan. Anda tidak ingin mengekspos cara Anda berkomunikasi dengan sumber data Anda dan juga Anda tidak ingin tes Anda mengandalkan api langsung.
Antarmuka perpustakaan klien (contoh tampilannya):
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);
}
Pustaka klien secara internal menggunakan Guzzle untuk komunikasi dan komponen Cache Doctrine untuk menyimpan hasilnya. Pemetaan antara objek entitas dan json dibuat oleh pemetaan, yang pernah ditulis - tidak terlalu sering berubah (atau peristiwa sama sekali). Dalam hal ini saya akan menyarankan menggunakan JMS Serializer untuk transformasi otomatis ke dan dari JSON (saya berasumsi bahwa Anda menggunakan JSON).
Anda akan membutuhkan mekanisme caching yang baik dan penyimpanan lokal, seperti Redis. Melakukan panggilan api pada setiap permintaan aplikasi akan membunuh server Anda dan secara drastis memperlambat aplikasi Anda. Sangat penting untuk memahami cara kerja cache http. Jika api Anda tidak menggunakan header caching (atau menggunakannya dengan cara yang tidak jelas), akan sangat sulit dan menghabiskan banyak sumber daya untuk melacak perubahan.
Anda juga akan ingin memikirkan tentang bagaimana klien harus bersikap jika koneksi terputus - haruskah klien menggunakan data yang macet? Sebaiknya gunakan beberapa server proxy antara aplikasi Anda dan API. Dalam hal ini proksi (seperti Varnish) dapat mempercepat permintaan Anda dan juga menyegarkan data yang macet di latar belakang tanpa memperlambat aplikasi Anda. Ini juga akan membuat situs web Anda online jika terjadi kegagalan API. Anda mungkin tidak dapat menulis data sementara itu, tetapi pengguna Anda masih dapat menelusuri data yang di-cache.
Dan berbicara tentang Doktrin, lihat " Hukum instrumen ".