2009-08-05 93 views
0

API接口,我們已經開發了圖形招聘工作B2B門戶網站,類似於相機準備藝術(www.camerareadyart.com)。它針對想要將位圖轉換爲矢量圖形,標誌設計和像將黑白圖像着色爲彩色等一般圖像處理的人員。易趣像一個門戶網站

我們要添加的設施,讓人們(我們的客戶),可以使用一組我們提供給後從他們的網站工作的API直接而不必逐字訪問我們的網站張貼他們的工作。

我從來沒有做過這樣的事,直到日期,所以我沒有想法,我怎麼能實現這樣的事情。我也想知道我們如何實施安全措施,只有那些被授權的人才能發佈他們的工作?

誰能給我的想法,我們如何才能做這樣的事情。

回答

1

這個問題涉及一個非常大的面積,我懷疑任何一個單一的答案可以涵蓋詳細事宜。我能做的是根據我所犯的錯誤提供一些起點。

建立在自己的API基礎上
不要將API功能添加到現有系統。這樣做會:

  • 導致額外的測試負載(你必須來測試您的應用程序和獨立的API)
  • 導致增加總體維護成本
  • 導致質量較差API比您想要提供的要多

您的總體目標應該是先構建API,然後在自己的API之上構建應用程序。這樣做有以下好處:

  • API的測試本質上是同時的應用測試
  • 你會不會「忘記」添加任何所需的API方法

你的應用程式和執行應用程序邏輯(API)在邏輯上是分開的 - 在等式的每一方面以及它所負責的方面,它們之間將存在明確的分離。這將有助於指導發展。這也將使您可以非常輕鬆地將應用程序和API放在不同的機器上,並在需要時使用。

使用自己的API是一個很重要的一點。您的API的設計最初是次優的,只有通過自己使用它,您才能夠以高效的方式向人們提供實際所需的功能。

你會最終有一個系統,它大致是這樣的:

-------------       ------------- 
|   |       |   | 
| Your APP | <= HTTP communication => | Your API | 
|   |       |   | 
-------------       ------------- 

這凸顯了一些進一步的好處:你可以與任何其他應用程序替換「你的APP」,讓你的客戶創造的應用程序,以用最適合他們的方式處理事情。您還可以在現有API之上創建新版本的應用程序 - 移至新版本的公共網站可能會更容易。

設計你的URL:映射類和方法
選擇明智的網址是太大的問題,只要選擇合理的類和方法名。從類及其方法派生URL是一種好方法。如果URL和類/方法之間沒有明顯的相關性,那麼從長遠來看,您會發現難以維護的事情。

我個人更喜歡的網址類和方法通過以下方式聯繫起來:

  • 地圖類頂級目錄
  • 映射方法頂級目錄的子目錄

例子:
你的API的網址https://api.camerareadyart.com
你有toColour()toBlackAndWhite()方法的image對象。

這可能映射到:

https://api.camerareadyart.com/image/toColour/ 
https://api.camerareadyart.com/image/toBlackAndWhite/ 

同樣的位圖矢量轉換:

https://api.camerareadyart.com/bitmap/toVector/ 

設計反應
當有人被從數據或信息的數據,一個你網址,會發生什麼?如何處理錯誤,如何處理例外?回答採取什麼形式?

我不能告訴你該做什麼。就我個人而言,我更喜歡將事物與HTTP緊密映射,然後在需要時才超越此範圍。

例如,如果進入的請求被接受並且被處理,但遇到錯誤內部我會發出500個狀態響應。同樣,如果給定的API方法需要未提供的身份驗證,則可能會發出403.利用現有的HTTP功能可以防止您重新創建某些內容。

使用HTTP
除了使用HTTP狀態代碼理智的現有的方面,一定要到處尋找一個僅HTTP滾動自己的解決方案之前,做一些方法。

希望用戶可以指定是否響應格式應通過XML或JSON?使用HTTP Accept頭。

想重新直接客戶,以不同的URL搶請求的結果?使用HTTP位置標題。

有許多功能,HTTP已經處理,你可能想要做很多事情。使用它們!

安全
一般有兩種問題在這裏解決:對用戶進行認證,並確定什麼樣的行動給定用戶可以執行。

安全性:身份驗證
用戶需要在他們的請求中指定他們是誰。

首先想到的解決方案是允許用戶指定用戶名和密碼,可能與用於訪問您的應用的用戶名和密碼相同。表面看來這是一個好主意,但它並不理想。

用戶最終將自己的用戶名和密碼烘焙到他們自己的應用程序中。不可避免地,一個用戶會忘記他們的密碼,並會改變它,以便他們可以愉快地訪問您的應用程序,在此過程中打破他們自己的應用程序。

用戶提供一個更好的選擇是提供一個認證令牌,它基本上是一個用戶唯一的唯一值,就像用戶名和密碼合併爲一個一樣。

這允許您在邏輯上將用戶名和密碼與訪問API分開。用戶可以隨時更改自己的應用的用戶名和/或密碼,而不會中斷他們對API的訪問。

用戶還可以擁有多個API令牌,每個令牌具有不同的訪問級別,允許用戶安全地將API令牌發送給第三方服務。

安全性:訪問控制
至於外界關注的是,你的API是一組URL。根據定義,每個URL都是唯一的,並執行一項獨特的任務。圍繞這些概念設置訪問控制機制是一個很好的起點。

我更願意保留令牌允許訪問的URL的每個令牌的列表。當使用給定的令牌訪問URL時,告知訪問哪個URL以及它是否位於令牌的允許的URL列表中是微不足道的。

如果您明智地選擇了一組URL,其中每個URL執行一個獨特的操作,此過程將爲您提供關於您將獲得的最佳級別的訪問控制。

爲了提供更精細的控制級別,您可能還需要指定每個允許訪問令牌的URL,允許使用哪些查詢參數。

+0

感謝您的回覆。 這意味着我應該將API實現爲Web服務。因爲只有Web服務才能夠公開API,並且用戶只能通過它進行連接。 我是對的還是另一種方式? web serveice將如何提供。託管公司是否需要在服務器上進行任何更改? – 2009-08-10 04:32:07

0

您顯然需要設計和運行您的後端Web服務。但是,所有其他功能(安全性,節流,OAuth密鑰管理,訂閱者門戶,用於嘗試API的交互式控制檯等)都是一組相當標準的功能,您可能不應該自行開發這些功能。

市場上有商業API管理解決方案。我爲擁有100%開源(Apache許可證)WSO2 API Manager的WSO2工作,您可以免費下載here或在WSO2 API Cloud中用作雲託管版本。