相关疑难解决方法(0)

在我的REST API中,我应该使用信封吗?如果我在一个地方使用它,我应该总是使用它吗?

我正在构建一个RESTful Web服务.我已经阅读了为每个机制使用HTTP的原则,只要它会占用你,而且大多数时候,就像获取资源一样,它工作得很好.

但是当我需要发布某种新条目时,为了清晰和健壮,无论客户端做什么,我都想提供新条目可能失败的特定验证错误.此外,存在特定错误,例如,用于创建新用户的数据完全有效,但可以采用昵称或电子邮件地址.简单地返回409 Conflict没有详细说明昵称或电子邮件地址的详细信息.

所以解决这个问题不是火箭科学:记录一堆特定的错误代码并返回一个有错误的对象:

{ errors: [4, 8, 42] }
Run Code Online (Sandbox Code Playgroud)

这意味着在请求失败的情况下,我不会返回REST哲学所预期的资源或密钥.类似地,当我返回许多资源时,我必须以某种方式在数组中构造它们.

所以我的问题是:如果我为每个请求标准化一个信封,我是否仍然会提供一个表现良好的RESTful Web服务,例如,总有一个像这样的对象{ errors, isSuccessful, content }

我之前已经构建了使用它的RPC风格的Web服务,但我不想做一些"几乎是REST"的东西.如果有任何关于REST的意义,我希望尽可能保持良好的行为.

如果答案是"地狱没有",我认为它可能是,我想知道它是否至少正确地解决了验证问题,并且对于这种问题解决可能是一个很好的参考,因为大多数指南我都是我发现只详细的简单案例.

rest

28
推荐指数
2
解决办法
2万
查看次数

JSON中的根节点

我的任务是定义两个Web应用程序之间的通信.我决定使用JSON.在JSON中有一个根节点有多常见?

假设我们有一个汽车对象.这是JSON,其中"Car"是根节点:

{"Car": { 
  "Make":"Mustang", 
  "YearBuilt":"1999"}}
Run Code Online (Sandbox Code Playgroud)

所以现在让我们说我有一个Tire对象,因为我们正在标准化拥有根节点,所以这个也必须拥有它.

{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
Run Code Online (Sandbox Code Playgroud)

将轮胎对象JSON集成到原始Car对象中可以显示它是多么笨重.

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999",
"Tires": "[{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Bridgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
]}}
Run Code Online (Sandbox Code Playgroud)

所以在PHP中序列化,第一个轮胎的制造将是$object->Car->Tires[0]->Tire->Make.由于根节点,那里有额外的轮胎级别.

如果Tire没有根节点,那么代码可能会更加纤薄.

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}
Run Code Online (Sandbox Code Playgroud)

在PHP中,混淆较少,因为冗余较少:第一个轮胎的构造被称为 $object->Car->Tires[0]->Make

没有根节点有什么不好的吗?我喜欢拥有根节点,因为它的行为类似于类名,但是不必要的级别会让我感到很烦恼,并且会使遍历变得更加复杂.

javascript php json

6
推荐指数
1
解决办法
2336
查看次数

标签 统计

javascript ×1

json ×1

php ×1

rest ×1