ฉันได้สร้างโปรเจกต์แบบ symfony ซึ่งใช้ API ภายนอก (JSON); สิ่งที่ฉันทำคือการสร้างไลบรารี่ของลูกค้าอิสระ ("ไคลเอนต์ไลบรารี่" - ชิ้นส่วนของซอฟต์แวร์, แพ็คเกจผู้แต่ง), ด้วยชุดเอนทิตีของตัวเอง (POPOs); มันรวมเข้ากับเฟรมเวิร์กโดยใช้อินเตอร์เฟสที่จัดทำโดย Symfony (ตัวอย่างเช่นเพียงแค่สร้างผู้ให้บริการผู้ใช้ที่กำหนดเอง )
ไคลเอนต์ทำการโทร http "เบื้องหลัง" ซึ่งเป็นสิ่งสำคัญสำหรับความสามารถในการทดสอบในอนาคต คุณไม่ต้องการเปิดเผยวิธีการสื่อสารกับแหล่งข้อมูลของคุณและคุณไม่ต้องการให้การทดสอบของคุณเชื่อถือ API แบบสด
ส่วนต่อประสานห้องสมุดลูกค้า (ตัวอย่างว่ามีลักษณะอย่างไร):
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);
}
ไลบรารีไคลเอ็นต์ใช้ Guzzle สำหรับการสื่อสารและคอมโพเนนต์ Doctrine Cache ภายในเพื่อแคชผลลัพธ์ การแมประหว่างเอนทิตีออบเจ็กต์และเจสันถูกสร้างโดยผู้ทำแผนที่ซึ่งครั้งหนึ่งเคยเขียน - ไม่ได้เปลี่ยนแปลงบ่อยนัก (หรือเหตุการณ์เลย) ในกรณีนี้ฉันขอแนะนำให้ใช้ JMS Serializer สำหรับการแปลงอัตโนมัติเป็นและจาก JSON (ฉันถือว่าคุณใช้ JSON)
คุณจะต้องมีกลไกการแคชที่ดีและที่จัดเก็บในตัวเครื่องเช่น Redis การเรียก api บนคำขอแต่ละแอปจะฆ่าเซิร์ฟเวอร์ของคุณและทำให้แอปพลิเคชันของคุณช้าลงอย่างมาก มันสำคัญมากที่จะต้องเข้าใจว่าแคช http ทำงานอย่างไร หาก API ของคุณไม่ได้ใช้ส่วนหัวแคช (หรือใช้ในส่วนที่คลุมเครือ) จะเป็นเรื่องยากมากและใช้ทรัพยากรในการติดตามการเปลี่ยนแปลง
นอกจากนี้คุณยังจะต้องคิดว่าลูกค้าควรปฏิบัติตัวอย่างไรหากการเชื่อมต่อขาด - ลูกค้าควรใช้ข้อมูลที่ค้างอยู่หรือไม่ จะเป็นการดีถ้าคุณใช้พร็อกซีเซิร์ฟเวอร์ระหว่างแอปของคุณกับ API ในกรณีนี้พร็อกซี (เช่นวานิช) สามารถเร่งความเร็วคำขอของคุณและยังรีเฟรชข้อมูลที่ค้างในพื้นหลังโดยไม่ทำให้แอปของคุณช้าลง มันจะทำให้เว็บไซต์ของคุณออนไลน์ในกรณีที่ API ล้มเหลว คุณอาจไม่สามารถเขียนข้อมูลในระหว่างนี้ แต่ผู้ใช้ของคุณจะยังสามารถเรียกดูข้อมูลที่แคชได้
และการพูดหลักคำสอนให้ดู " กฎของเครื่องดนตรี "