在我的模特中,我有Event
和User
s。每个Event
都有一个leader
属性,指向User
,但是并不总是必须有主机,在这种情况下,主机为空。
在我的API中:
GET /users/
会返回所有用户的列表
GET /users/3/
返回用户3信息,{"name": "John", "href": "/users/3/"}
GET /events/
返回所有事件的列表
GET /events/2/host/
应该返回作为事件2主机的用户。(比如说这是用户3)
我应该返回{"href": "/users/3/"}
,只是指向用户的链接吗?或者用户本身的表示,{"name": "John", "href": "/users/3/"}
?
让我说我选择第一个选项。如何更改用户?
PUT /events/2/host/ json={"href": "/users/2/"}
- 这有意义吗?然后我的服务器必须解析端点以确定哪个用户ID是新主机,然后在数据库中分配它。看起来有点不合适,但Flask有办法将端点解析为参数。但这是正确的方法吗?
最后,在GET /events/2/
资源中,我考虑在表示中使用属性"host":{"href": "/events/2/host/"}
。这有意义吗?如果没有主机,则根本没有href
属性,只有一个空字典分配给host
。
答案 0 :(得分:0)
简而言之,我认为您应该在获取事件时返回表示,例如,在更新事件时使用链接。但设计仍然取决于你; - )
以下是不同的案例:
GET /events/2/host/
{"name": "John", "href": "/users/3/"}
PUT /events/2/host/
{"href": "/users/3/"}
DELETE /events/2/host/ (to set the host field to null)
我认为OData v4规范可以为您的设计提供一些好的想法。此链接提供了有关处理与OData的实体关系的方式的良好见解:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/entity-relations-in-odata-v4。
此外,通过查询参数$expand
,OData允许配置是否加载实体依赖项。如果例如定义了字段host
,则您将获得引用实体的内容(如果不是),仅具有引用。
OData还提供了一种获取后缀为$ref
的依赖项的引用的方法。
另一个链接也可以为您提供一些想法:http://templth.wordpress.com/2014/12/15/designing-a-web-api/。
希望它对你有所帮助。 亨利