我正在实现一个可以创建客户端和创建联系人的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架构?
谢谢!
答案 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字符串(对象)进行构造。
如果您有任何疑问,请提问,但是这种基本策略将使您到达想要去的地方。