【发布时间】:2020-01-24 19:57:10
【问题描述】:
我已经开始创建一个 RESTful API(好吧,我已经尽力了,我正在尝试遵循这些模式)并且我偶然发现了一个我不确定如何处理的场景。我将解释当前的结构:
我的应用程序有 4 个控制器:
- 客户
- 付款
- 日志
以客户控制器为例,我定义了以下动作:
- GET /customers:返回客户列表
- POST /customers:创建新客户
- GET /customers/{id}:使用提供的 id 返回客户
- PUT /customers/{id}:使用提供的 id 更新客户
- DELETE /customers/{id}:销毁客户
这是客户控制器的完整代码:
namespace App\Http\Controllers;
use App\Customer;
use Illuminate\Http\Request;
class CustomerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return Customer::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$customer = Customer::create($request->all());
return response()->json($customer, 201);
}
/**
* Display the specified resource.
*
* @param \App\Customer $customer
* @return \Illuminate\Http\Response
*/
public function show(Customer $customer)
{
return $customer;
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Customer $customer
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Customer $customer)
{
$customer->update($request->all());
return response()->json($customer, 200);
}
/**
* Remove the specified resource from storage.
*
* @param \App\Customer $customer
* @return \Illuminate\Http\Response
*/
public function destroy(Customer $customer)
{
$customer->delete();
return response()->json(null, 204);
}
}
其他控制器中的代码非常相似。还需要注意的是:
- 一个客户可以进行多次付款
- 一个客户可以在日志中有多个记录
问题从这里开始:
我需要在前端显示一个包含所有客户数据(姓名、电子邮件、注册日期等)的摘要页面和一个显示付款次数的框和另一个显示日志中条目数的框。
我需要提出 3 个请求吗? (一个给 /customers/id,另一个给customers/id/payments,另一个给customers/id/logs)
如果我在 customers/id 调用中返回所有与客户相关的数据,我是否违反了 RESTful 约定?
【问题讨论】:
-
我猜日志和付款是绑定在一起的?
-
日志记录客户在系统中执行的所有操作以及执行这些操作的时间。例如,customer1 昨天登录。付款是客户付款的清单。他们需要付费才能使用该服务