我刚刚读完了Restful Web Services和Nobody Understands REST or HTTP,现在正在尝试设计一个符合RESTful设计的API。
我注意到了一些API URI设计中的模式:
http://api.example.com/users
http://example.com/api/users
http://example.com/users
假设这些设计正确使用了
Accept
和Content-type
头部,用于XHTML、JSON或任何格式之间的内容协商。
我认为,通过在URI中显式使用API,客户端将期望一种不是本质上适合人类阅读的超媒体数据格式,并且可以更轻松地消费而无需显式设置这些URI是纯RESTful实现与隐式内容协商的问题吗?
Accept
头部。换句话说,API暗示你期望JSON或XML而不是XHTML。
我能想到的唯一理由是,为什么有人会使用API子域名设计他们的URI,是因为基于我的假设这是一种扩展技术,它应该使多层服务器基础架构中的路由请求负载更轻松。也许存在反向代理被剥离头部的情况?我不知道。不同的服务器处理不同的表示形式?这是在服务器端逻辑上分离资源表示的问题吗?
也许子域名仅用于外部消费者,以使服务器避免来自内部使用的开销。速率限制?
我的设计尝试遵循RESTful实践,通过设置适当的头部、适当使用HTTP动词并以我认为包括“API”在URI中是多余的方式来表示资源。我错过了什么吗?
为什么有人会在URI中设计RESTful API时加上“API”?
或许他们可以吗?也许我不理解这个设计的问题在于,只要它遵循某些规范的组合,就算不符合RESTful API实现,也没有关系?有多种方法可以解决问题。 与HATEOAS相关吗?
更新:在研究这个话题时,我得出结论,考虑REST的思想很重要,但不应将其视为一种信仰。因此,在URI中是否有“api”更多地是一种设计决策,而不是一条坚定的规则。如果您计划公开展示网站的API,则最好使用api子域来帮助处理应用程序的逻辑。希望有人能贡献他们的见解供其他人学习。