Web services RESTfulWebAPI中有多少自定义MIME类型?
RESTful web API应该为每个主要资源类(例如客户、预订、酒店房间等)使用特定于供应商的自定义MIME类型,还是应该在所有资源中共享特定于供应商的MIME类型 一方面,每个资源都是不同的,因为它有不同的字段,例如,可能接受新客户的端点不能接受新订单Web services RESTfulWebAPI中有多少自定义MIME类型?,web-services,http,rest,mime-types,Web Services,Http,Rest,Mime Types,RESTful web API应该为每个主要资源类(例如客户、预订、酒店房间等)使用特定于供应商的自定义MIME类型,还是应该在所有资源中共享特定于供应商的MIME类型 一方面,每个资源都是不同的,因为它有不同的字段,例如,可能接受新客户的端点不能接受新订单 然而,这表明这是一件坏事(tm),因为这可能会使客户端的解析过于复杂,但除此之外没有给出太多细节。我可以肯定地认为这是一个合理的担忧。按照每种资源类型的方法,您甚至可能会继续为每种类型的集合创建一个自定义类型,包括嵌入的非匿名实体。扩展@d
然而,这表明这是一件坏事(tm),因为这可能会使客户端的解析过于复杂,但除此之外没有给出太多细节。我可以肯定地认为这是一个合理的担忧。按照每种资源类型的方法,您甚至可能会继续为每种类型的集合创建一个自定义类型,包括嵌入的非匿名实体。扩展@deceze留下的注释:您不需要它。您是否可能混淆了“特定于供应商的自定义MIME类型”还有别的吗 我不明白为什么您不能限制自己发送所有资源的
application/json
或application/xml
(或两者,取决于请求)
当然,每个资源的结构完全取决于其各自的字段,但您仍然可以将它们作为JSON哈希(如果您选择JSON)提供
RESTfulWebAPI是否应该使用特定于供应商的自定义MIME类型
对于每个主要资源类别(例如客户、预订、,
或者API是否应该共享一个特定于供应商的MIME
在所有资源中键入
这并不重要,因为它并没有真正将客户机与服务器解耦,它只是一个粗粒度的解决方案
然而,最坏的实践表明,这是一件坏事(tm)
这可能会使客户端的解析变得过于复杂,但不会给
除此之外还有很多细节
是的,这是真的。您应该使用细粒度的解决方案,例如带有标准vocab的RDF,比如开放链接数据,其余部分可能使用hydra。MIME类型定义为“Internet媒体类型是一个由两部分组成的标识符,用于在Internet上标准化文件格式”。这意味着,如果数据的格式正在更改,(TXT->HTML->JSON->XML->YAML->CSV->…),MIME类型需要更改 也就是说,还有其他完全有效的用途,上面约书亚·贝尔登特别提到了一个。下面是一个确定API版本的示例 当前版本 默认情况下,所有请求都会收到v3版本的API。我们 鼓励您通过Accept明确请求此版本 标题 接受:application/vnd.github.v3+json 发送到API的v3版本的v2请求的数据布局是不兼容的,即使它们位于同一URL(反之亦然),这是有道理的。它还有助于减少从一个API版本移动到下一个API版本所需的更改(例如,您不必更新URL) 也就是说,这并不意味着您的应用程序在默认情况下应该使用自定义MIME类型,以便为特定于版本的API提供“未来证明”。如果您的应用程序没有具有许多公共使用者的大型面向外部的API,那么您可能不需要自定义版本的MIME类型 此外,RESTAPI端点应该确定生成和使用的数据的结构,而不是MIME类型。例如,GET“/customers/5”应该只生成从客户实体序列化的数据。和后“/预订” 应仅使用将正确反序列化到保留实体的数据。这意味着您的端点的序列化将处理语法检查,并应返回400级代码,并解释所提供的数据结构不正确 GitHub API中突出显示此行为的另一个示例
HTTP/1.1 422 Unprocessable Entity
Content-Length: 149
{
"message": "Validation Failed",
"errors": [
{
"resource": "Issue",
"field": "title",
"code": "missing_field"
}
]
}
总之,大多数序列化框架都是“开箱即用”的,希望处理“application/json”和“application/xml”。虽然您当然可以添加自定义的特定于供应商的MIME类型,但如果您没有充分的理由这么做,为什么要这样做呢
抱歉,如果我只是用这个回答创建了一个僵尸问题。使用MIME类型可以将REST资源与其表示(即json、xml、pdf等)分开。这会减少耦合,但ideia不会使用它来定义资源的模式,而是定义其格式 一方面,每个资源都是不同的,因为它有不同的字段,例如,可能接受新客户的端点不能接受新订单 如果我不理解的话,这可以通过正确识别资源来实现
直接回答您的问题:尽量减少自定义MIME类型的数量。我想您可以使用它们来声明API的不同版本,因为这里已经提到了。我首先想听听自定义MIME类型的例子。这似乎是一个寻找真正问题的学术想法。用于对rest服务进行版本控制。