客户端始终使用“ application / json”的接受标头和“ application / json”的内容类型发出请求
是的,这是正确的做法,但这并不意味着供应商会在意。尽管我完全理解您的无奈,但因为我还认为JSON服务应始终提供JSON响应,但是有很多例子并非如此。
在整个项目中,相同的做法已应用于两个不同的供应商和两个不同的服务。我发现自己必须证明为什么需要更改服务。供应商表示,客户端应对此进行处理,甚至我选择的REST库也受到了质疑(RestEasy),因为默认情况下它不应对此问题。
好吧,我必须同意供应商的意见。这是他们的服务,只要他们清楚地记录了使用它的特殊情况,那么您就不能强加他们对其进行更改。这对他们来说是不利的,因为开发人员采用API的速度会很慢,并且如果他们听了开发人员的需求,那么他们会对其进行更改,但是可悲的是,没有规则要求他们必须遵循标准。
问题是我缺少什么吗?
请求标头没有任何意义,除非它们在另一端被正确中断。我知道,如果我使用PHP开发Web API,则会遇到请求标头。我可以随心所欲地回应。而在IIS中使用C#配置的服务可以更轻松地处理请求标头,它们的类型以及处理响应类型。这与供应商用来构建API的工具有很大关系。
我对此很着迷吗?
是和否。我有一些开发人员朋友,他们将无法超越。他们会被问题所困扰,并且无法继续执行其他任务,直到API以他们期望的方式工作为止。现在这很古怪。
这是一个问题,因为供应商创建了“更多工作”来完成您的任务。任何人都会对此感到沮丧。我知道我会的。
在这种情况下,可以使用不具有application / json内容类型的JSON API吗?
绝对可以,但这不是一个好习惯。
客户端只能告诉服务器a的上下文类型request
是什么。它无权强制的内容类型response
。客户端只能通知服务器它将accept
收集可能的内容类型。
标头字段定义
接受请求标头字段可用于指定响应可接受的某些媒体类型。接受标头可用于指示该请求特别限于一小部分所需类型,例如在请求嵌入式图像的情况下。
客户端可能会请求的图片image/jpeg
,但服务器会以响应,text/html
并提供状态代码“ 404
如果未找到图片”。服务器也可能响应不正确。那里有许多Wordpress网站可以响应text/html
并200
提供未找到文件页面的状态代码。
现在,这是服务器方面的所有BAD练习。我想告诉您的是,这是绝对可能的,并且经常发生。人们在配置这些东西时不知道他们在做什么。
参考将不胜感激。您如何从商业角度解决这种情况?
我在几个项目中遇到了这个问题。您将post
JSON数据发送到服务器,它会返回JSON或HTML响应。
知道响应中的类型并不是什么大问题。如果第一个字符是{
或者[
你可以假设JSON。如果是这样,<
您可以假定HTML。这就是我过去的处理方式。有时,编写API的程序员会完全了解HTTP标头。一切都作为text/html
回应而返回。如果幸运的话,他们将Apache配置为默认值text/plain
,有时可以提供帮助。
这些问题是存在的,并将在未来很长一段时间内继续存在。服务器到服务器的通信到目前为止是不受管制的活动。没有哪个管理机构会从工会中将供应商赶出给出错误HTTP响应的服务器。