我有一个资源,其中包含实体格式的原始版本,以及后来的改进版本,其中包含重大更改。
调用者使用Accept
标题选择更高版本。
假装我的服务只返回JSON。
响应应该是application/json
还是Accept
标题中的格式?有人在乎我是否作弊?
例如,这是好还是坏:
GET /people/1; Accept: application/vnd.personv2+json
200 { "Name": "John" }; Content-Type: application/json
服务器使用JSON呈现了一个v2人格式,但是说它只是“正常”的正常应用程序JSON,而不是说它正是所要求的格式。
答案 0 :(得分:1)
不,accept
标记端点可以处理的内容类型。端点可以处理json吗? XML? IMG? HTML?等...更正式地说:
Accept request-header字段可用于指定响应可接受的某些媒体类型。 Accept标头可用于指示请求仅限于一小组所需类型,例如请求内嵌图像。
content-type
是响应在其有效负载中的含义,以便请求发起者知道如何处理。并且正式:
Content-Type entity-header字段指示发送给收件人的实体主体的媒体类型,或者在HEAD方法的情况下,指示请求为GET时发送的媒体类型。< / p>
例如 - 您的Web服务器中有一个端点接受json(例如 - 客户端数据{'name': 'some-name', 'age': '30'}
)并返回一个图像(例如 - 30岁人群的描述性图像) )。在这种情况下,接受将是application/json
,响应类似于img/*
这也适用于您的情况。接受是一回事,内容类型是另一回事。即使它们在语义上也不一定相同。
答案 1 :(得分:1)
RFC 7231非常清楚:
如果[accept]标题字段是 出现在请求中,并且没有任何可用的表示形式 响应的媒体类型列为可接受的, 原始服务器可以
- 通过发送406(不是 可接受的)回复或
- 通过处理来忽略标题字段 回应好像不受内容协商的影响。
格式化我的。
是的,您提出的要求(&#34;当客户请求application/json
时退回application/vnd.personv2+json
)&#34; 就可以了。< / p>