Laravel API体系结构-最佳实践

时间:2018-08-22 23:54:34

标签: php laravel api-design

我正在实现一个可以创建客户端和创建联系人的API。联系人可能与客户相关联。

我的ClientController.php具有所有CRUD方法。

我还有一个带有所有CRUD方法的ContactController.php。

我希望允许在一个API调用中全部创建联系人并将其分配给客户端。

我在想最好的方法是将功能添加到ClientController并通过API调用: / api / client / 6 / addContact

public function addContact($clientId, Request $request) {
   $contact = new Contact($request->all())->save();

   $client = Client::find($clientId)->attach($contact->id);

   return response()->json(null, 200);

}

但是我的问题是,添加联系人(并验证它)的方法在ContactController.php中,所以我将代码加倍。如何使用ClientController @ addContact中的ContactController @ store方法?

针对这些类型的问题是否有通用的API架构?

谢谢!

2 个答案:

答案 0 :(得分:2)

我建议使用嵌套的api resource route

// generate the controller class
php artisan make:controller Api/ContactController --api

// create the route definitions
Route::apiResource('clients.contacts', 'ContactController');

上面创建了路线:

GET /clients/{client}/contacts
POST /clients/{client}/contacts
GET /clients/{client}/contacts/{contact}
PUT/PATCH /clients/{client}/contacts/{contact}
DELETE /clients/{client}/contacts/{contact}

答案 1 :(得分:0)

您正在建立一对多的关系。我将专注于雄辩地建立这种关系,然后其余的将落到位:

https://laravel.com/docs/5.6/eloquent-relationships#one-to-many

正确建立关系后,您的API调用将围绕具有一个客户端和一个或多个联系人的json字符串(对象)进行构造。

如果您有任何疑问,请提问,但是这种基本策略将使您到达想要去的地方。