Html RESTful API和web导航-它们兼容吗?

Html RESTful API和web导航-它们兼容吗?,html,json,api,rest,Html,Json,Api,Rest,也许我把事情弄糊涂了,或者把它们复杂化了,但是我正在努力开发一个支持HTML和JSON内容类型的RESTful API。以一个简单的用户管理特性为例。我希望有这样一个API: 获取/用户:列出所有用户 GET/users/{id}:查看单个用户 发布/用户:创建新用户 使用JSON有效负载向/users发布的编程客户端将需要一个201创建的响应,其位置头指定新创建用户的URL,例如/users/1。然而,通过web浏览器创建用户的人将使用表单编码的有效负载发布到同一URL,并期望被重定向到用

也许我把事情弄糊涂了,或者把它们复杂化了,但是我正在努力开发一个支持HTML和JSON内容类型的RESTful API。以一个简单的用户管理特性为例。我希望有这样一个API:

  • 获取/用户:列出所有用户
  • GET/users/{id}:查看单个用户
  • 发布/用户:创建新用户
使用JSON有效负载向/users发布的编程客户端将需要一个201创建的响应,其位置头指定新创建用户的URL,例如/users/1。然而,通过web浏览器创建用户的人将使用表单编码的有效负载发布到同一URL,并期望被重定向到用户列表页面,要求API返回302/303重定向,其中位置头为/users

从纯概念的角度来看,我发现API会根据提交的内容类型做出不同的反应,这令人惊讶,我想知道这是否是糟糕的设计。再者,考虑编程API和以Web为中心的API是同一个API可能是错误的,人们不应该担心这些担忧,更担心给不同的客户提供一个好的体验。
你怎么看?

你偶然发现了两个不同的问题

首先,典型的web浏览器是一个相当糟糕的REST客户端

第二,web应用程序api不一定是restapi(参见#1)

因此,你为两位主人服务的难题

可以说,当涉及到诸如工作流之类的细节时,表示与应用程序语义几乎没有关系,特别是当您具有相同的富媒体类型(与受约束的媒体类型(如图像或其他类型)时

因此,在这些术语中,考虑到类似的媒体类型,让应用程序以不同的方式运行是不合适的

另一方面,媒体类型是请求的另一个方面,它会影响后端的操作。例如,您可以请求一个省略的“lite”数据类型,该数据类型很可能不提供指向api其他部分的链接,而更丰富的媒体类型可能会提供链接,或者您的授权级别是您可以查看哪些数据、有哪些其他关系可用、甚至支持哪些媒体类型的一个因素

因此,公平的说,请求负载的每个方面都会对特定的语义和对服务器的任何特定请求的效果产生影响。在这种情况下,您的场景并不是很离谱

最后,需要通过文档来阐明您作为API设计师的意图