2009-11-16 54 views
1

這是我的question關於如何爲媒體分析服務器設計REST API的延續。根據Derrel的回答,在我目前的設計中,我開始使用POST /facerecognition/analysisrequests?profileId=33分析媒體文件,它指定配置文件ID 33(以前由服務器在另一個POST上創建)應該被使用。針對文件上的多個操作的REST API

我有兩個簡短的問題:

  1. 如何延長這種方法來對同一個文件,例如多種分析請求對給定文件執行臉部識別,文本檢測和廣告檢測?正在使用二進制編碼(例如,每一位表示分析)並且例如做POST http:[server URL]/00000011/analysisrequests?profileId=33一個好主意?
  2. 是否使用服務器端數據庫(例如mySQL)來跟蹤所有配置文件和進程ID?

感謝,

Ç

+0

(1)的一個簡單解決方案是從配置文件中推斷要執行的任務。然後,'POST [server URL]/analysis/profileId = 33'就足夠了。這個缺點是任務信息不會在URL中丟失。這對於負載均衡器來說會是一個大問題嗎? – recipriversexclusion 2009-11-16 21:13:09

回答

0

我會推薦使HTTP POST更完整的使用。根據相同的URI進行所有POST請求:/analysisrequest。使用application/x-www-form-urlencoded發送參數。

所以:

 
Host: yourserver.com 
Accept: */* 
Content-Length: 73 
Content-Type: application/x-www-form-urlencoded 

face_recognition=true&text_detection=true&ad_detection=true&profile_id=33 

multipart/form-data也將讓您在發送的操作相同的請求對文件進行被分析的文件,假設這是一個希望的場景。有了額外的優勢,您應該能夠爲HTML表單和您的REST API使用完全相同的API端點。

2

我把分析的要求作爲參數,而不是作爲路徑的一部分的類型。它們可以是請求主體中的POST參數,也可以是URL列表profileId中指定的參數。例如:POST http://server/analysisrequest?profileId=33&analysisType=faceRecognition&analysisType=textDetection。提交參數的多個值完全可以。

您可以提交分析類型的二進制編碼,但拼寫出來會更加清晰和自我記錄。添加新的分析類型時,二進制編碼也有點脆弱;添加一個新數字會影響所有請求的URL,即使是那些不使用新類型的請求。

服務器端數據庫是這種Web應用程序的典型代表,它可能是一個很好的解決方案。您可能還想考慮一個像sqlitederby這樣的進程內SQL數據庫解決方案,以避免單獨數據庫進程的複雜性。