建立宁静的网址

时间:2013-10-02 03:08:02

标签: rest restful-url restful-architecture

假设我有狗和猫,他们有colorweightname。可以仅使用colorweightname来识别每个动物,当然还可以使用colorsweightsnames不是唯一的,意思是可以具有相同的值。未来可能会添加一些其他动物类型。

您将在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  

或其他什么?

2 个答案:

答案 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的设计方式无关紧要。

假设您需要以下业务操作

  • A)制作动物
  • B)获取动物信息
  • C)获取所有动物或动物子集的信息
  • D)更新动物

id仍然可以使用(生成),如果它提供的好处;否则,它可以保留在服务器端而不会暴露给客户端。无论哪种方式它仍然有效..

A)创建动物

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> 

B)获取动物信息

GET: /api/v1/animals/<id>/

OR

GET: /api/v1/animals/dogs/black/12/jack/

C)获取所有动物或动物子集的信息

GET: /api/v1/animals/dogs/

OR

GET: /api/v1/animals/dogs/black/

D)更新动物

PUT: /api/v1/animals/<id>
BODY: {‘name’ : ‘jackjunior’}

OR

PUT: /api/v1/animals/dogs/black/12/jack/
BODY: {‘name’ : ‘jackjunior’}

快乐的设计!