我正在设计一个REST API,尽管我查阅了许多最佳实践指南,但我没找到太多关于如何处理POST
所需的表现结构与从GET
返回的同一表现结构之间差异的最佳实践。
对于虚拟user
表现形式的GET
可能会像这样:
{
"id": 1234,
"created": "2012-04-23T18:25:43.511Z",
"username": "johndoe@example.com",
"name": "John Doe"
}
然而,相同虚拟的user
表示的POST
不能指定某些属性(即id
和created
):
{
"username": "johndoe@example.com",
"name": "John Doe"
}
显然,这只是一个过于简单的例子,但考虑到用户无法指定某些字段(并且可能并不总是明确哪些字段与所应用的方法有关),是为每个字段创建单独的表示还是期望最完整的版本,并在服务器上透明地处理数据差异,这是最佳实践?
尽管只使用单个表示并在服务器端处理不同之处看似很容易,但如果用户无法清楚指定哪些值(或例如使用PUT更改哪些值),我担心这会给用户带来不好的体验。 如果倾向于创建单独的表示,是否可以应用命名规范来定义表示?
例如,i_user表示输入用户,o_user表示输出用户。或者user_full和user_min,或者user和.user等。
更新:我的过于简化的例子可能没有充分说明问题。 想象一个具有50个属性的表示(例如具有所有监视属性的服务器表示- CPU,RAM,温度,存储驱动器A,存储驱动器B,文件权限等)。 在这50个属性中,30个是只读属性,其中20个是可设置的值。