假设我有狗和猫,他们有color
,weight
和name
。可以仅使用color
,weight
和name
来识别每个动物,当然还可以使用colors
,weights
和names
不是唯一的,意思是可以具有相同的值。未来可能会添加一些其他动物类型。
您将在Web REST API服务中使用什么URI进行CRUD操作?
/api/v1/animals/dogs/black/12/jack
/api/v1/animals/type/dogs/color/black/weight/12/name/jack
/api/v1/animals?type=dogs&color=black&weight=12&name=jack
或其他什么?
答案 0 :(得分:1)
给我
/api/v1/animals?type=dogs&color=black&weight=12&name=jack
最有意义。使用RESTful API,您正在访问资源,此处的资源是“动物”。其他字段实际上是人类可解释的属性,而不是用于获取单个动物的唯一标识符。
为了使其更加干净,您可能需要考虑为每只动物提供一个标识符来检索资源
/api/v1/animals/{id}
并将其他API视为搜索。
答案 1 :(得分:0)
URL应该用于指定API要管理的“资源”。
资源是“动物”(猫/狗/ ......),它们由类型/颜色/重量/名称唯一标识。
在进入URL设计之前,需要定义“业务”操作;否则,URL的设计方式无关紧要。
假设您需要以下业务操作
id仍然可以使用(生成),如果它提供的好处;否则,它可以保留在服务器端而不会暴露给客户端。无论哪种方式它仍然有效..
POST: /api/v1/animals/dogs/black/12/jack/
RETURN: id: <id>
OR
POST: /api/v1/animals/dogs
BODY: {‘color’ : ‘black’, ‘name’ : ‘jack’, ‘weight’ : 12 }
RETURN: id: <id>
GET: /api/v1/animals/<id>/
OR
GET: /api/v1/animals/dogs/black/12/jack/
GET: /api/v1/animals/dogs/
OR
GET: /api/v1/animals/dogs/black/
PUT: /api/v1/animals/<id>
BODY: {‘name’ : ‘jackjunior’}
OR
PUT: /api/v1/animals/dogs/black/12/jack/
BODY: {‘name’ : ‘jackjunior’}
快乐的设计!