用于文件上多个操作的REST API

时间:2009-11-16 19:15:12

标签: api rest

这是关于如何为媒体分析服务器设计REST API的question的延续。根据Derrel的回答,在我目前的设计中,我使用POST /facerecognition/analysisrequests?profileId=33开始分析媒体文件,该文件指定应使用配置文件ID 33(之前在服务器上由另一个POST创建)。

我有两个简短的问题:

  1. 如何扩展此方法以在同一文件上发出多个分析请求,例如在给定文件上执行面部识别,文本检测和广告检测?使用二进制编码(例如,每个比特表示分析),例如做POST http:[server URL]/00000011/analysisrequests?profileId=33一个好主意?
  2. 使用服务器端数据库(例如mySQL)是跟踪所有配置文件和进程ID的最佳方式吗?
  3. 谢谢,

    C

2 个答案:

答案 0 :(得分:2)

我将请求的分析类型作为参数,而不是作为路径的一部分。它们可以是请求正文中的POST参数,也可以在URL列表profileId中指定。示例:POST http://server/analysisrequest?profileId=33&analysisType=faceRecognition&analysisType=textDetection。为参数提交多个值是完全可以的。

您可以提交分析类型的二进制编码,但拼写出来更清晰,自我记录。添加新的分析类型时,二进制编码有点脆弱;添加新数字会影响所有请求的URL,即使是那些不使用新类型的请求。

服务器端数据库是这种Web应用程序的典型代表,它可能是一个很好的解决方案。您可能还需要考虑像sqlitederby这样的进程内SQL数据库解决方案,以避免单独数据库进程的复杂性。

答案 1 :(得分: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端点。