我们有客户注册API,接受姓名,电子邮件和移动,并生成customerId,即:
{
"name": "john",
"email": "john@gmail.com",
"mobile": "+134325325"
}
我们为此API点击创建客户记录。可以从多个客户和表单创建客户。我们有一个新的要求,如果我们得到这个"客户创造"从特定表格记录,我们需要将此信息(姓名,电子邮件,手机)+(customerId)发送给某些第三方API。
我认为,根据非常实际的说法,这个API应该只创建"客户"而不是做那些只对某些客户/表格有效的额外事情。
在这种情况下,哪个是最佳选择:
答案 0 :(得分:1)
POST通常用作不适合REST API的操作的全能。批量创建,更新或删除,合并记录,登录,复制等都是常见的例子。但是你需要做的其他事情与PUT不相对应,GET或DELETE通常会因POST而过载。只需确保为每次使用POST使用不同的URL。
即。 POST / foo应该创建一个foo,POST / bulk_delete应该根据查询或表单参数删除几个fooa。
答案 1 :(得分:0)
我不觉得这里有适合的独立资源。我们假设我们讨论的不是API
端点设计,而是简单的class
方法createCustomer
。公开新端点与创建新的重载方法createCustomerSpecific
相同。这是RPC
- 样式 - 方法的数量将继续增长。
样式的REST
建议使用相同的方法,但封装在输入对象中创建资源所需的所有数据。
对我来说,你的案例应该由存储库工厂驱动:你的应用程序逻辑知道要调用哪个存储库 - 简单CustomerRepository
或CustomerWithNotificationRepository
。
答案 2 :(得分:0)
我希望这个问题的拥有者可能不需要这个答案。但这是我的想法。
我的假设如下,
您有CustomerService类,其中包含使用Customer Data执行CRUD操作的方法。
您有一个端点/ api / customers(方法:POST),它将调用CustomerService.create()方法在DB中创建客户详细信息。
使用您的第二种方法(轻微修改):
我不想创建另一个端点,因为除了调用第三方API之外我们没有做任何不同的事情。因此,请求JSON将被修改,如下所示,以保存来自客户端的附加数据。
{
"clientData": {
"notify": "true"
},
"customer": {
"name": "john",
"email": "john@gmail.com",
"mobile": "+134325325"
}
}
创建客户后,我们必须检查通知字段是否为真。如果是,那么将使用客户详细信息调用第三方API以进行其他处理。