我正在爲我們的大規模應用程序編寫我的第一個成熟的API的規劃和早期編碼階段。多年來我已經使用了多個API,但這是我第一次被要求構建一些能夠在此級別上進行程序化交互的東西。構建自定義API - 需要邏輯檢查
我已經做了相當多的研究尋找最佳實踐等,並確定了我的想法將提供一個相當靈活的應答通信系統。
我的問題是:
這是你期望看到的API交互?
我錯過了什麼重要的東西嗎?
說明API的:
我將使用HTTP類型進行通信1協議和用於認證的獨特API密鑰。
我期待這通過SSL連接通過CURL請求。成功(200 OK)的XML響應(速率限制請求)的
實施例:無法XML響應的
<?xml version="1.0" encoding="UTF-8"?>
<node>
<short_message>Request Complete</short_message>
<long_message>Rate Limit Status Response</long_message>
<response_data>
<rate_limit>40</rate_limit>
<rate_used>31</rate_used>
</response_data>
</node>
實施例(將在適當的400/500頭被髮送);
<?xml version="1.0" encoding="UTF-8"?>
<node>
<error_code>1201</error_code>
<short_message>API Error</short_message>
<long_message>The requested API version (1.5) is invalid</long_message>
</node>
此外,我設置了錯誤代碼,用於搜索文檔中用於緩解其他開發人員的偏移。請求的合格/不合格將通過適當的HTTP代碼 - 成功(200),錯誤請求(400),找不到方法(404),驗證失敗(403)等等來提供...
我也在使用基於版本的端點,以便任何代碼更改都不需要外部代碼更改。
最後,devs將能夠請求XML,JSON或PHP序列化數組中的所有響應。
我的代碼的內部非常簡單。所有數據都通過POST(可能使用CURL或其他替代方法)傳遞,包括一個唯一的API密鑰。該API密鑰鏈接到系統中的用戶,然後該用戶將允許內部方法執行爲該特定用戶啓用的有限功能集。
我遵循API的「黃金法則」 - 「總是添加,永不刪除」。
那麼......還有什麼我應該考慮的,我錯過了什麼?
@Jan Algermissen-(+1)哇,非常好的答案 - 今晚我將通過所有這些鏈接工作。您正確地傾向於您提到的基於HTTP的Type I。我試圖讓開發人員儘可能地訪問它,並認爲這將是最好的方法 - 將我的標記從Restful更改爲其他內容。你認爲REST有什麼缺點嗎?我仍然會使用POST over GET來安全地獲取數據。 – Shane 2010-02-25 23:35:12
很高興有幫助。我顯然是支持REST的,但我也明白,學習曲線很高。我認爲只要你知道系統的特性是什麼,你就可以安全地做最符合要求的事情。因此,如果長期維護成本不是您的主要問題,那麼您可能能夠緊密結合。知道這一點很重要。因此我的'桌子'是因爲我覺得人們真的開始對這一切感到困惑:-) 你最後一句我不明白,你能重新說嗎? – 2010-02-26 00:03:57
我應該擴大一點!我計劃對所有API調用使用SINGLE URL,而不是爲每個方法/函數調用不同的URL。所以你可以打電話給http://www.domain.com/api/execute/,然後把所有必需的信息發佈到該腳本中。其中一個必需的參數是要執行的方法。我希望這更有意義!另外,我希望這不是太不標準,它似乎會使開發更容易,而不必緊跟多個腳本調用。 – Shane 2010-02-26 01:12:43