另一个Rest API关系

时间:2016-03-08 11:56:58

标签: api rest

我已经在这里挖掘了很多关于宁静关系的问题,但还没有找到后续的东西。

考虑这种情况

GET /api/users(?include=custom_fields) - returns an array of users, optionally including relations as nested properties

GET /api/users/1(?include=custom_fields) - returns a single user object

POST /api/users - creates a new user (if the request includes an array of "custom_fields" these are created and linked)

PUT /api/users/1 - replaces user entity with supplied payload

PATCH /api/users/1 - updates the user properties provided

DELETE /api/users/1 - deletes

GET /api/users/1/custom_fields - gets all users custom_fields

PUT /api/users/1/custom_fields - deletes all existing custom_fields and creates ones provided

PATCH /api/users/1/custom_fields - appends if not exists, or creates new custom fields for this user

DELETE /api/users/1/custom_fields - deletes all custom fields for user

DELETE /api/users/1/custom_fields/{id} - deletes custom field for use by id.

这一切对我来说都很有意义并且按预期工作,但是我现在在我的管理区域中实现了“用户编辑”屏幕,这显示了用户对象和自定义字段。

现在我可以看到保存此表单的唯一RESTFUL方式是:

PATCH到/ api / users / {id}

保存用户。当那样做的时候,

PUT到/ api / users / {id} / custom_fields

更新自定义字段。

不理想但会起作用,但是我知道肯定会有其他相关资源,如用户角色,电子邮件等。

这并没有改变这种情况,只是意味着更多的终点。

这件事对我来说有些气味。简单地保存用户即时必须向至少两个端点发出请求。

如果没有两个不同的请求,你会建议如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是将所有这些(自定义字段,角色等)包含在User表示中,您似乎已经在GET和{{1}上执行此操作}。只需将其扩展到POSTPUT

如果您已经在用户上为PATCH方法支持了一些media-type,那么您可以设想扩展它以定义添加/删除自定义字段,角色,以及您需要的任何内容。