REST API - 端点语法 - 按属性获取项目 - 而不是按 id

Gil*_*ain 6 rest restapi

我正在实现我的第一个 REST API,我对 URL 端点的语法有疑问。

我知道我应该使用这些端点来获取、创建、更新和删除:

  • 获取项目列表
    方法:GET,网址:/api/items

  • 通过 id 获取项目
    方法: GET, Url:/api/items/:id

  • 添加项目(请求正文中的新项目数据)
    方法:POST,Url:/api/items

  • Modify item(修改请求体中的item数据)
    方法:PUT,Url:/api/items/:id

  • 删除项目
    方法: DELETE, Url:/api/items/:id

但是可以说 item 的界面是

interface item
{
  id: string;
  name: string;
}
Run Code Online (Sandbox Code Playgroud)

通过名称获取项目的请求 url 应该是什么?
我不能使用 Method: GET, Url: /api/items/:name,因为这将匹配 get-by-id 请求。那么我应该如何编写这个端点的语法?

inf*_*rno 6

除非您正在执行 OData,否则没有标准的 REST URI 语法。您可以完全自由地设计自己的 URI,甚至/resource/{id}完全有效。

我喜欢做的是结束集合的 URI/并使用查询来过滤集合。所以我会做/api/{version}/items/?name={name},如果他们有独特的名字和你所期望的项目,而不是一个集合,然后我会做这种方式:/api/{version}/items/name:{name}。但这是我的风格。

从客户端的角度来看,URI 语法完全无关紧要,因为服务器根据 HATEOES 约束将有效的 URI 模板提供给客户端。如果您不这么认为,那么您可能正在构建 CRUD API 而不是 REST API。