關於 REST 和伺服器邏輯的問題
好的,首先我是一個競爭伺服器菜鳥。因此,如果我因我的無知而讓您感到不安,我深表歉意。
我目前已經設置了一個 linode 並安裝了 MySQL 和 apache。現在,我正在嘗試學習如何使用 REST 從我的 iphone 應用程序與伺服器進行通信。
我希望應用程序向伺服器發送一組座標,並讓伺服器對其數據進行搜尋並返回其他附近座標的列表。我還想以盡可能少的頻寬使用進行通信。
我聽說 GET 是一個很好的方法,但我也聽說資訊(例如座標)可以很容易地被外部資源讀取。安全是一個問題,我希望發送到伺服器或從伺服器接收的所有資訊都是私密的。我應該使用 POST 來實現這一點嗎?有沒有更好的辦法?我可以使用 JSON 發送請求(以減少頻寬使用)嗎?
REST 甚至是執行此操作的好方法嗎?我看到的很多教程似乎只是獲取或操作數據表,而幕後沒有太多的伺服器邏輯。SOAP 還是其他更好的東西?
目前我真的不清楚很多,我的 google-fu 讓我的結果很慢,所以任何資訊都會非常有幫助。
GET 和 POST 在 HTTP 上都不是安全的,如果安全性很重要,您可能應該考慮獲得 SSL 證書,即使是自簽名證書也可以 - 如果您告訴您的“客戶”(我猜它是某種手機/平板電腦) ?) 信任證書。
REST 可能是解決此問題的好方法,因為它為您提供了一個很好的簡單標準。您目前可能只有一個端點,但如果您在 REST 中建構,您可以隨著應用程序的增長輕鬆添加更多端點。REST 是一種標準,而不是一種協議。這意味著,REST API 應該符合這些標準;
- 從伺服器獲取數據應該使用 GET 來完成。GET 絕不能更改資源。
- 伺服器上的更改(創建、更新)資源應使用 POST 完成。
- 所有端點/方法都應該有自己的 URL(IE api.example.com/get_something 而不是 api.example.com/api?method=get_something)
- 應根據文件類型返迴響應(因此 get_something.xml 應返回 xml,get_something.json 應返回 JSON 等,您不必支持所有格式,但您所做的應該可以按文件類型請求)。
請注意,GET 和 POST 都可以為伺服器上的應用程序提供額外的參數,但在 GET 的情況下,這通常僅用於過濾查詢,而使用 POST,它可以提供有關要記錄的更改的詳細資訊。
關於 JSON 問題,通常 JSON 會使用更多頻寬(只有一點點),但使用起來要容易得多。
例如,這是一個可能的 API 響應的純文字版本;
-25.90962,161.08639 -4.11525,-91.31969 -13.76025,147.22927
但這裡有一個 JSON 響應
{ coordinates:[ { lat: -25.90962, long: 161.08639 } { lat: -4.11525, long: -91.31.969 } { lat: -13.76025, long: 147.22927 } ] }
JSON 具有易於機器讀取的範例,而純文字則必須進行解析。請記住,對於 JSON 等文件類型,您可以使用 GZIP 壓縮來顯著減少需要傳輸的數據。
注意:當您深入了解它時,POST 應該只創建新資源,而 PUT 應該只更改現有資源。