我对从服务器请求计算实体时使用的正确约定感兴趣。即 - 涉及特定实体,但不返回其数据。而是返回基于实体的计算。
以一个存储多个时钟的站点为例,每个时钟具有不同的偏移/时区值。该网站的目的是展示模拟时钟的图像,双手指向适当的方向。
使用良好的惯例我希望能够做到这一点:
POST /clocks
{
"offsetHours": 5
}
我会收到这个回复:
201 (Created)
{
"id": "fe884d5e",
"offsetHours": 5
}
现在我希望能够检索那个时钟对象:
GET /clocks/fe884d5e
回应:
200 (OK)
{
"id": "fe884d5e",
"offsetHours": 5
}
到目前为止,这一切都很好。但是我希望有两个其他端点可以访问。第一个将返回为时钟偏移计算的当前时间。第二个将返回显示基于时钟当前时间的模拟时钟的图像数据。
我的问题是:约定规定对这些数据项的GET请求应该是什么样的?或者在处理实体的计算视图时会不会松散?
答案 0 :(得分:0)
但是我希望有两个其他端点可以访问。第一个将返回为时钟偏移量计算的当前时间。
像
这样的东西GET /clocks/fe884d53/localTime
第二个将返回显示基于时钟当前时间的模拟时钟的图像数据。
像
这样的东西GET /clocks/fe884d5e/localTime/analogClock.jpg
或
GET /clocks/fe884d5e/analogClock.jpg
这里的关键思想是这些信息资源,其方式与时钟本身的描述信息资源完全相同。
从消费者的角度来看,表示只是一个文件。不应该有任何方法来知道文档是新生成的,还是从文档存储中复制出来的,还是从Web缓存中拉出来的。
存在计算的事实只是隐藏在api背后的实现。
一旦你明白这些是共享实现细节的不同资源,剩下的工作就是自行车脱落(我们的路由很容易找到正确的实现吗?我们在路径中是否有分层数据?段,以及查询中的非层次化部分,使拼写看起来像“资源”,以符合我们的本地编码标准等。)