2012-01-30 58 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