REST API - 架构需要意见

时间:2011-01-08 19:57:07

标签: rest

我正在设计一个REST API。我现在正在处理的部分涉及简单地从服务器上读取JSON数据形式的对象并修改它们。

我正在考虑使用的资源如下所示: / data / {table name} / {row key}

我想在此资源上允许GETPUT操作。

我正在努力解决的问题是,我想将其他数据与JSON对象一起返回,例如客户消息,往返数据库所花费的时间等等......我会还希望允许使用有效负载发送查询参数,如果它们包含在那里,则URL太长。


所以资源会像这样工作:

获取

GET /data/{table name}/{row key}

服务器返回:

{
   data:{...JSON OBJECT GOES HERE ....},
   message:"customer messages go here",
   responseTime:'123ms',
   otherInfo:"Yada yada yada;
}

PUT

PUT GET /data/{table name}/{row key}

客户端作为有效负载发送:

{
   data:{...JSON object goes here...},
   queryArguments:{...extra long query arguments go here...}
}

我担心这可能会违反适当的RESTful GETPUT资源的规则,因为您发送到服务器的内容并不完全是您要退回的内容,因为其他信息包含在内在有效载荷中。我宁愿不让每个操作都成为POST的补救措施。

我是不是太喜欢这个?还有其他方法我应该构建这个吗?

谢谢!

编辑::::

我应该注意,在资源:/data/{table name}/{row key}中,为了简单起见,我使用了'表名'和'行键'。这适用于noSQL数据库。此资源旨在与Amazon S3类似。 “uuid”实际上比“行键”更好。

3 个答案:

答案 0 :(得分:3)

至于我,这取决于如何使用额外的信息。对于我的客户,responseTime不是一个问题(或者至少我认为是:),他们只需要那个响应。对于我作为开发人员,它可以帮助调试。因此,当客户给我缓慢的请求时,我可以轻松地测试它,并且额外的信息可以提供帮助。这里我的意思是可以创建简单的URL,因为您指定了/ data / {table name} / {row key}并根据该请求发送响应,并且您可以再创建一个url / data / {table name} / {row key} / debug或其他任何与“reponseTime”等附加信息相同的数据。只是一个想法;)

更新:啊是的,忘了:不要使用table-name作为你网址的一部分,至少要修改它的名字。我不想告诉任何人如何调用我的表格,如果有人要破解我的数据库注入额外的代码我希望她花更多的时间寻找任何信息,而不是在盘子上提供她的信息:)

答案 1 :(得分:2)

我没有看到任何错误,看起来很标准。我不确定你打算在queryArguments传递什么,这是指定为JSON-P客户端执行的回调吗?我建议您记住的唯一事情是REST处理资源,并不一定与表一对一映射。您可能希望使用某种类型的GUID或UUID来映射到该资源,而不是使用行键。

答案 2 :(得分:2)

我认为你的做法没有错 但如果我实施这个场景,我会问自己以下问题:

  1. 谁是我的资源?
  2. 客户消息是资源的一部分吗?
  3. “响应时间”是资源的一部分吗?
  4. 我们以“响应时间”为例。如果它是你资源的一部分,你的方法是完美的,没有别的办法 但是,如果它不是资源的一部分,请将其作为HTTP标头返回。很公平。