我有休息服务,我将向其发布数据。是在发布数据中使用http表单元素发布数据更好,还是将所有数据发布在一个json字符串中然后在服务器端解析字符串更好。有什么理由选择一种方式而不是另一种方式?
提前致谢。我试图确保我们在架构上以最好的方式编码。谢谢
我认为这取决于您的数据。如果您的数据非常平坦,键和简单值之间存在一一对应关系,那么表单样式提交可能是最合适的。如果您有更复杂的嵌套数据或某种数组,我会使用 json 方法。我不认为这两个选项或多或少是 RESTful。
表单元素是要走的路。如果您在帖子中使用 json,那么您需要将结构传达给客户。这通常是在带外完成的(我从未见过它在带内完成,但我可能错了),这会在客户端和服务器之间产生耦合。
当您使用表单时,带内表单会向客户端传达发布数据应该是什么。当数据需求发生变化时,表单也会发生变化,客户端可以(可能)进行相应的调整。
例如,假设您在您的媒体类型中定义了以下名词:email
、password
、first-name
、等last-name
,date-of-birth
并且您有一个需要email
和的用户创建表单,password
稍后(通过另一个表单)填充其他用户可选的数据。后来决定您希望用户在创建帐户时提供他们的姓名,因此您更新了表单,使其成为 requires email
、和password
first-name
last-name
. 由于客户端已经熟悉这些名词(并且知道每个名词属于什么数据),因此编写良好的客户端将与更新后的表单兼容。如果只是发布 json 数据,客户端将无法工作,因为他们不知道所需的 json 数据已更改(除非您更改媒体类型,在这种情况下,无论如何您都会破坏它们)。
现在这种方法仅适用于在您的媒体类型中定义的名词。如果您要添加一个新名词,那么您只能将其设为可选(现有客户端仍然可以使用,新客户端可以利用新名词)或者如果您需要使其成为必需,那么您需要创建一个新的媒体类型,只有新的(或更新的)客户端才能使用。
我认为您必须使用第一个解决方案,因为它更接近 RESTful 架构。此外,这个解决方案是一个标准,因此您不需要做额外的事情来编码/解码 POST 参数。