我的REST服务中的参数等

时间:2012-01-30 11:24:14

标签: rest parameters

我正在建立一个REST网络服务,当然做了一些研究,但仍然留下了一些未解答的问题。我的服务只会为初学者返回JSON。

1.我已经决定在我的GET中使用查询参数,比如

/api/users/54354/?fields=name,age 

用于从id = 54354的用户获取姓名和年龄。 关于approch采取什么似乎有很大的讨论,但这种看法是一种方式。对于我的POST,PUT我当然使用body参与theese参数。你对这个问题有什么看法,如果你认为它有不同的解决方法,请争辩。

2: 当使用GET(或POST和PUT)时,如何使用"lastname starts with 'Pe'""Age between 10 and 20"?之类的运算符指定查询我在考虑将完整查询放在某种对象中是否有意义。 E.g。

api/users/?filter={'name':{'startsWith':'Pe'},'Age':{'Min':10},'Age':{'Max:'20}}

这种类型将JSON语法应用于查询,但我不确定是否还有其他“最佳实践”方法。以上将需要服务中的解析器/验证器来验证有效的过滤器等。

3:最后一件事就是如何对它应用AND和OR操作。  我想它也可以在JSON对象中工作。

希望你们中的一些人能就这个问题提供一些反馈:)

1 个答案:

答案 0 :(得分:1)

  1. 我想知道你是否应该真正检索单独的字段。由于您的用户代表资源,您应该获取整个资源并从客户端的json中提取所需的信息。如果您为用户附加的资源太大而无法按查询传输,则应将其建模为子资源(/api/users/54354/subresource)。

  2. 在查询中使用JSON语法在我看来并不是最佳做法,因为花括号算作应该编码的不安全字符。您可以使用/api/users?nameStartsWith=pe&age=10-20指定查询。问号应该遵循资源的标识符而不是斜杠。 &符号表示逻辑AND,减号表示范围。

  3. 这取决于您的查询有多复杂。您可以在= startWithName=pe,foo,bar之后使用值列表来启用那里的析取。这应该适用于范围age=10-20,33,40-50。您可以使用{AND}提到的AND &+用于OR(+通常在API中用作AND,但是......)。当你包括括号时,你可以嵌套这样的表达式...如果你需要。但我非常怀疑你应该这样做,因为有这种复杂查询的专用搜索查询语言。