Gor*_*ght 77

媒体类型application/vnd.api+json是指JSON API.你可以在这里详细阅读它.

简而言之,JSON API是一个自以为是的理由:

...规范客户端应如何请求获取或修改资源,以及服务器应如何响应这些请求.

  • 如果有一个关于供应商前缀(`vnd.`)的句子包含在@rmhartog的答案的答案中,那就太棒了. (24认同)
  • 认真地说,如果你把账户置于完全无知的位置,这个答案是可怕的 (5认同)

rmh*_*tog 54

第一种是API特定媒体类型.供应商前缀(vnd.)表示它是该供应商的自定义.的+json指示,它可以被解析为JSON,但媒体类型应当上JSON的顶部进一步定义的语义.

第二个意思是内容是JSON.但是,这通常不是很有用,因为它没有定义JSON值的含义.

阅读此内容的一个很好的起点是维基百科,但是有关更多详细信息,您可以始终按照指向该页面上相应RFC的链接.


Nic*_*lay 28

如果您不确定,请使用application/json- 它是通用的MIME类型,只需要您返回的数据是格式良好的JSON.


application/vnd.api+jsonMIME类型是使用(容易混淆的命名)保留用于通信"JSON API"协议.

此上下文中的"JSON API" 并不意味着任何基于HTTP和JSON的API.它是构建API 的框架,允许客户端获取和修改相互关联的实体.例如,博客应用程序可以实现符合"JSON API"规范的API,该规范允许在单个HTTP请求中获取给定作者的最后10篇文章,每篇文章的元数据和注释.

该规范特别定义:

  • 应该形成请求的具体方式(即什么URL参数控制排序和分页以及输出中包含的数据);
  • 响应中JSON文档的特定结构,例如:

    文档必须至少包含以下顶级成员之一:

    • data:文档的"主要数据"
    • errors:一组错误对象
    • meta:包含非标准元信息的元对象.

    成员dataerrors不得在同一文件中共存.


小智 10

这称为MIME 类型版本控制或内容协商。当您开发 REST API 时,您可能希望将来添加该 API 的不同版本,例如 v1、v2 等...,并且我们 API 的不同用户应该能够调用所需的版本。现在可以采用不同的方法来解决此 API 版本控制问题,例如URI版本控制、参数版本控制、标头版本控制或MIME版本控制。

让我们通过一个例子来讨论MIME 版本控制

假设我们的 REST API 响应有一个Person实体:

public class Person {

   private String name;
   private String email;

   public Person() {
   }

   public Person(String name, String email) {
       this.name = name;
       this.email = email;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getEmail() {
       return email;
   }

   public void setEmail(String email) {
       this.email = email;
   }

}
Run Code Online (Sandbox Code Playgroud)

但我们想要的是 API 的调用者应该提及一个版本,并根据该版本我们将与适当的人员进行响应。下面是我们的 RestController :

@RestController
public class PersonController {
    
    @GetMapping(path = "/person", produces = "application/vnd.company.api-v1+json")
    public Person getPersonV1() {
        return new Person("Mr. ABC", "abc@gmail.com");
    }

    @GetMapping(path = "/person", produces = "application/vnd.company.api-v2+json")
    public Person getPersonV2() {
        return new Person("Mr. XYZ", "xyz@gmail.com");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我使用不同版本访问我们的 API,并从 API 获得适当的响应。请检查下面的输出:

application/vnd.company.api-v1+json 请求版本 1

application/vnd.company.api-v2+json 请求版本 2

因此,我们可以看到如何使用这种 MIME 版本控制方法对 REST API 进行版本控制。不同的组织使用不同的 API 版本控制方法。


rm *_*tar 6

多用途Internet邮件扩展(MIME)类型(或)媒体类型是一种标准化的方式来表示通过Internet传输文件的性质和格式。它在IETF RFC 6838中标准化。在互联网编号分配机构(IANA)负责保持所有正式的MIME类型的赛道的官方机构。

JSON API使用的媒体类型为application / vnd.api + json,并且已在IANA上正确注册。

API + JSON媒体类型用于提供JSON的不同API之间的互操作性。

它是根据“加厚JavaScript”客户端及其需求而考虑创建的,但并不特定于他们。因此,以vnd(供应商)为前缀。

在JSON API上添加更多点:

  • JSON API是一个规范,它定义了有关请求和响应方式以及应该如何的api规范。
  • 允许我们创建具有良好定义的结构(例如资源-关系及其链接等。​​)
  • 指定REST API对CRUD操作的反应方式。
  • 允许客户端缓存响应。