繁体   English   中英

REST API:设计API,允许用户提交POST内容并获取一些值,而不是创建ID作为响应

[英]REST API: Design API to let user submit POST something and GET some value other than created Id in response

它有点冗长,但易于理解,因此请阅读。

我们有一个反馈表,用户可以在其中填写投诉/建议。 要填写投诉,用户需要填写他/她的{姓名,手机号码,邮政编码}。 针对此投诉,我们会根据用户的个人识别码显示我们最近的呼叫中心号码。

用户提交反馈[名称,手机,邮政编码]后,完整的过程为:

  • 用户可以在屏幕上看到最近的客户服务联系电话。
  • 新投诉已在数据库中注册。

这个过程需要跨平台(移动,桌面,应用程序)集成,我们需要为此设计Restful API。 几种选择:

  1. GET / api / complaint /?mobile = {mobile}&name = {name}&zip = {zipcode}。 该API将发回最近的呼叫中心号码作为响应,并将记录保存在投诉表中。 但这看起来并不轻松,因为我们正在使用GET请求添加数据库记录。
  2. 通过请求正文中的{mobile},{name}和{zipcode} POST / api / complaint /。 这也可以完成上述所有操作,但是这里的问题是,按照其他情况,我们在POST响应中发回新创建的对象,在这里我们将发回最近的客户呼叫中心号码,这与数据库中的投诉记录创建无关。
  3. 创建两个单独的API,第一个使用{mobile} {name}的POST / api / complaint /将在投诉表中插入一条记录。 其次,创建GET / api / callcenter /?zip = {zipcode},它返回该邮政编码的客户服务编号。 这里几乎没有问题,例如两个API已解耦,那么如果在执行GET时POST不成功怎么办,反之亦然呢? 另外,连续打这两个会很慢吗?

这3个中的哪一个是正确的,或者有第四种方法可以解决此问题?

我实际上喜欢第三个选项。 发帖失败不应该影响正确联系最近的呼叫中心的能力吗? 失败的帖子在第二个选项中也是一个问题。 这些呼叫中心应该已经在数据库中。 我确定您会有一些代码/子例程来计算任何给定的邮政编码和所有呼叫中心之间的最短距离。 在第三个选项中,即使不会在失败的帖子中提出投诉,至少用户也可以获取最近的呼叫中心的号码以继续获得帮助

教人钓鱼:几乎每个问题都以“ REST是X的方式是什么?”的形式出现。 答案是“找出如何使用html链接和表单,并尽可能地匹配该模式。”

这里的问题是,按照其他方式,我们在POST响应中发回新创建的对象

如果那不是真的,那会让您的生活更轻松吗? 如果是这样,那么好消息。

  1. REST没有说“创建”。 它说资源应该符合统一的接口。

  2. 如果您通过http(s)与API通信,则统一接口由RFC 7231定义(不是REST; REST是一种体系结构样式,Web是使用该样式构建的参考应用程序)。

  3. HTTP并不表示POST必须等于create。

POST方法要求目标资源根据资源自身的特定语义来处理请求中包含的表示形式。

  1. HTTP规范没有说您必须返回创建的对象。 实际上,它说200 OK表示您返回不同的内容:

行动状态或结果的表示

对于您而言,您的行为状态是“恭喜,我们尝试找到离您最近的护理中心成功。这是...。”是的,这与您在以下位置创建投诉记录无关数据库。 从Web客户端的角度来看, 没有数据库 只是资源和统一的界面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM