2009-11-16 47 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数据库解决方案,以避免单独数据库进程的复杂性。