【问题标题】:What endpoint would be suitable for answering a question in REST design什么端点适合回答 REST 设计中的问题
【发布时间】:2019-05-28 20:20:55
【问题描述】:

什么端点适合回答问题。

我想用

 post /questions/{id}

这不是自我解释的。使用posting to "/question/2" 很难想象它是在回答一个问题。

我考虑过使用

 post  /questions/{id}/answers 

如果相关,问题和答案不会映射到我系统中的模型或表格。我使用另一个 api 来访问问题。我的应用程序用作集线器。

【问题讨论】:

  • 你能澄清一下吗?您是否在设计后端并询问如何设置端点?或者您是否尝试调用现有 API(如 Stackoverflow)并询问如何操作?
  • 在遵循 REST 架构模型的系统中,URI 中使用的实际字符与客户端无关,因为它不应该解析 URI 或从 URI 中推断出一些知识。由于 REST 只是 Web 的一种概括,因此您也可以并且应该使用您在 Web 中习惯的相同概念。看看 SO,即 URI 是否告诉您有关问题答案的任何信息?不,尽管可能有可用的答案。更重要的是您使用标准,例如媒体类型、链接和链接关系 (HATEOAS),并通过表单教客户做什么

标签: rest http server


【解决方案1】:

REST 不关心您的 URI 使用什么拼写。 /cbcaf573-4f34-40ae-a91b-f097adfac495 是一个完全令人满意的 URI。您看到的各种拼写约定应该与本地编码标准中的变量命名具有大致相同的权重;它可能会让人们更容易理解正在发生的事情,但机器并不关心。

您通常需要注意的是:哪个资源的表示将因请求而更改。如果/questions/{id} 的表示通常包含其中的所有答案,那么您通常希望将答案发布到questions/{id}。如果问题的表示仅包含指向答案的链接,那么您通常希望 POST 到与链接相同的 URI。

这样做的动机是HTTP的cache invalidation rules都是基于不安全请求的目标uri。

但是,不需要使用缓存失效样式。例如,在这个问题上:它的 URI 是

https://stackoverflow.com/questions/56349556/what-endpoint-would-be-suitable-for-answering-a-question-in-rest-design

但是当我提交答案时,带有我的表单数据的 POST 请求被发送到

https://stackoverflow.com/questions/56349556/answer/submit

成功保存我的答案后,我会得到一个客户端重定向到

https://stackoverflow.com/questions/56349556/what-endpoint-would-be-suitable-for-answering-a-question-in-rest-design/56350857#56350857

这也有效 - 我的浏览器在确定如何创建它需要遵循提交协议的请求方面没有任何问题。

【讨论】:

  • 所以,对于端点的命名方式,我不需要完美主义者。我认为存在一个非常严格的规则。
  • @DiegoAlves 围绕着这个神话,URI 不能包含动词,因为动词是通过 HTTP 操作表达的,但是客户端和服务器都不应该解释 URI,这没有任何意义。此外,无论如何,所有“可用”的 URI 都应该由服务器返回,而不是由客户端组成。有些人甚至说有一个 RESTful URI(它不存在)的概念,它以某种方式表达了资源的意图。这实际上很危险,因为这可能会导致客户端将端点的响应格式实现到客户端中,但可能会因更改而失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2022-09-30
  • 2023-03-28
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多