【问题标题】:REST API Url PatternREST API 网址模式
【发布时间】:2018-10-26 19:09:48
【问题描述】:

我目前正在设计一个 REST API 接口,并试图确定构建调用的最佳方式。

我正在提供在系统中创建记录的功能。但是,可以使用两组不同的数据创建记录,具体取决于调用数据的系统。

我正在考虑提供格式为

的网址
/api/create/auto
/api/create/manual

并使用相同的函数(自动/手动将是路由参数)进行处理,主体包含适当的数据。但是我想知道是否提供格式的网址

/api/createauto
/api/createmanual

并使用两个单独的函数来处理是一种更好的使用格式。所涉及的处理相当简单,我只是将传入的数据传递给数据库中的两个存储过程之一来完成工作。如果我以第一种方式执行此操作,则必须添加验证以确保仅传递正确的值。

【问题讨论】:

  • 不回答您的问题,但 IMO 越多 RESTful convention 将通过使用 PUTPOST 动词来表达 CREATE 的意图,即离开 create 出路.
  • 感谢您的评论。我只是以“创建”为例,并且正在使用 POST。我应该在我的例子中选择一个更好的短语。
  • 你可以有一个正则表达式(auto|manual)的路由

标签: c# rest


【解决方案1】:

REST Api 最佳实践实际上表明端点应该是名词而不是动词。在最佳实践情况下,端点应该是

POST /api/object_name

然后,您可以通过数据正文中的字段指定自动与手动。否则,如果您真的想通过 URL 指定自动或手动,则可以使用查询参数,尽管我认为这实际上不是 kosher。

POST /api/object_name?type=auto

您最好的选择是将类型添加到 json 正文中(假设您使用的是 json)。所以像

{"type":"auto","data":{data json object}}

【讨论】:

  • 您能否提供一个链接,指向“REST Api 最佳实践实际上表明端点应该是名词而不是动词”的链接,我很想知道这一点。
  • 这里列出了一些不错的 api 资源。 restapitutorial.com/resources.html
  • 谢谢。我正在考虑是否也将参数作为 Json 主体的一部分传递。我的直觉是它应该是一个端点,因为在一天结束时,结果是相同的(系统中的新记录)
【解决方案2】:

您可以通过使用Route 属性为每个函数设置路由,以第一种方式设置您的 URL,并且仍然指向 2 个不同的函数。

[Route("create/auto")]
public void AutoCreate(){//do something...}

Link to Microsoft docs on Attribute Routing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2019-05-03
    • 2012-12-04
    • 2020-06-21
    相关资源
    最近更新 更多