我想知道设计用于按不同字段搜索的 RESTful API 端点的最佳方式是什么。
例如,我有一个资源作为
class Employee
{
public int Id {get;set;}
public string Name {get;set;}
public string MobilePhoneNumber {get;set;}
public string Email {get;set;}
}
现在我想设计一个 GET 端点来按不同的字段搜索员工。如果前端将 id 传递给端点,则我按 id 进行搜索。
如何设计终结点以满足此要求。还是我应该为每个字段创建三个端点?
谢谢
无需创建三个端点。只需有一个返回多个员工的GET
搜索终结点:
GET /api/employees
然后允许通过查询字符串传递搜索参数。
例如GET /api/employees?name=Ben&Email=ben@stackoverflow.com
对于 ID,您通常会公开另一个GET
终结点,以便仅获取具有该 ID 的一名员工,而不是允许搜索具有该 ID 的多个员工:
GET /api/employees/{Id}
我将建议两个GET
端点。第一个返回一个对象,最后一个返回一个数组。
要按 ID 查找资源,我可以建议端点接受 id 作为必填信息,例如:
GET /api/employees/123
因为您只能从 ID 信息中返回一个资源。如果该 ID 不存在,则可以返回404
(未找到(HTTP 代码。
响应:
{
"id": 123,
"name": "John Lock",
"mobilePhoneNumber": "13334564454",
"email": "john.lock@dmail.com"
}
对于其他字段,您可以创建另一个终端节点以返回将字段作为可选参数传递的资源数组:
GET /api/employees?name=John&mobilePhoneNumber=333&email=dmail.com
响应:
[
{
"id": 123,
"name": "John Lock",
"mobilePhoneNumber": "13334564454",
"email": "john.lock@dmail.com"
},
{
"id": 321,
"name": "John Smith",
"mobilePhoneNumber": "33367546566",
"email": "john.smith@dmail.com"
}
]