在RESTful Web服务中是否建议使用JSON文字值(字符串/数字)作为有效负载或响应正文中的输入参数?
如果我有一个端点PUT /mytodolist
,它可以接受请求有效负载中的JSON字符串文字值"Take out the rubbish"
(使用Content-Type=application/json
),或者它是否应该接受JSON对象({"value":"Take out the rubbish"}
)?
同样,GET /mytodolist/1
可以在响应正文中返回"Take out the rubbish"
,还是应该返回正确的JSON对象{"value":"Take out the rubbish"}
Spring MVC使得实现和测试此类端点变得容易,但客户已将此标记为非标准或难以实现。在我看来,JSON文字是 JSON,但不是JSON对象,所以我说它没问题。我没有找到使用Google的推荐信。
编辑1:Clafirication
问题完全在于'标准',如果它允许或不允许。
我理解可扩展性的问题,但是永远不能设计一个完全可扩展的接口IMHO。如果需要进行更改,我们可以尝试以向后兼容的方式扩展我们所拥有的内容,但 会在它变得混乱并且需要其他方法时出现 - 这通常由版本控制处理API以某种方式。我发现它是公平的,因为使用文字作为请求/响应主体立即变得不可扩展,而提出合理的单属性JSON对象则不然。
还可以理解,某些框架在处理JSON文字方面存在问题,这是此问题的起源。我使用的工具碰巧支持这个,所以我认为这没关系,但前端库没有。
但是,我现在想要找到的是,如果使用JSON文字是根据事实上的标准(即使它是一个角落),也不是。
答案 0 :(得分:0)
我建议总是使用JSON对象。一个原因是,对于Content-Type应用程序/ json,人们期待一些东西盯着" {"并非所有框架都能正确处理json文字。第二个原因是,您可能会向列表项添加一些其他属性(截止日期,类别,优先级等)。然后,您将通过添加新字段来破坏向后兼容性。
答案 1 :(得分:0)
在您的示例的上下文中可能是可以接受的,但请记住,明确的界面更易于使用,这将鼓励采用。
例如,您的界面可以将"Take out he rubbish"
解释为与{task:"take out the rubbish"}
相同,但是一旦您添加了其他属性(例如"when"
或"who"
)请求中的字符串变得模糊不清。随着界面的成熟,您不可避免地会添加对新属性的支持。