2012-01-30 44 views
1

我建立一个REST web服务,当然做了一些研究,但仍留有一些未解答的问题。我的服务将仅针对初学者返回JSON。参数等在我的REST服务

1.I已经从使用id = 54354用户获取姓名和年龄结算使用queryparameters我GET,像

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

。 似乎有什么正在接受的大讨论,但这似乎是一个平常的方式。对于我的POST,PUT I当然要使用它的参数。如果你认为这种解决方式不同,你认为这种做法有什么看法,请争辩。

2: 当使用GET(或POST和PUT对于这个问题)你会如何指定与运营商查询,如"lastname starts with 'Pe'""Age between 10 and 20"?林考虑它是否将是有意义的把完整的查询在某种类型的对象。例如。

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

这种JSON的语法适用于queryies,但林不知道是否有另一种“最佳实践”计算策略这个的。以上将需要服务中的解析器/验证器来验证有效的过滤器等。

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

一些希望你们可以给这个问题上的一些反馈:)

回答

1
  1. 我不知道如果你真的应该取得独立的领域。由于用户代表资源,因此应该获取整个资源并从客户端的json中提取所需的信息。当您将资源连接到用户,这些资源太大而无法按每个查询进行传输时,应该将其建模为子资源(/api/users/54354/subresource)。

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

  3. 这取决于你的查询有多复杂。您可以在=(如startWithName=pe,foo,bar)之后使用值列表来启用分离。这甚至应该适用于范围age=10-20,33,40-50。你可以可能使用&如上所述为AND和+为OR(+经常用作AND在API中,但是......)。当你包括括号时,你可以嵌套这样的表达式......如果你需要的话。但我认真地怀疑你应该这样做,因为有这种复杂查询的专用搜索查询语言。

+0

感谢您的回答。它是有道理的,但是如果我想要AND或或者不同的字段,如:startWithName = pe,foo,bar&age = 10-20,33,40-50。 &用于查询字符串以分开。解决方案是将保留关键字和+定义为OR和,例如;因为它是&查询=(startName:pe,foo,bar +年龄:20-30);性别:男性 – sunebrodersen 2012-01-30 20:31:35

+0

'&'不是单纯的分隔符,它是你的AND。您必须在布尔表达式(表达式计算为true或false)中进行思考:field = value是一个表达式,(expr + expr)是一个OR表达式,(expr&expr)是一个AND表达式。括号可以让你像想要的那样复杂,例如'API /用户?(nameStartsWith = PE&年龄= 20)+(染发=黑色,绿色+自行车=真)。所以你不需要''''或':'。 – mtsz 2012-01-30 20:38:30

+0

感谢您的澄清。我认为,只要是我不能控制客户的部分使用,我就会随着这种进步而前进。 – sunebrodersen 2012-01-31 08:34:50