是否始终与针对公共Web服务/ API的RESTful设计相关?

时间:2017-07-25 17:41:08

标签: web-services rest asp.net-web-api architecture restful-architecture

毫无疑问,RESTful是热门话题,在很多情况下似乎都是一种切割器设计模式。

努力将它应用到我自己的Web API(现有的和即将发布的)我终于想知道它是否与我所做的相关(如果我们忘记它是在我们尝试响应的某些RFC中的事实;)。 / p>

首先,我主要处理的动态数据至少确定了3个参数,最多可能达到10个。

考虑一下Web API执行声音效果和格式转换(均衡,回声,音量,速度......)。你需要发送你的凭据,一组未确定的效果名称和设置以及声音均衡。

url可能类似于effectMaker / echo / 10pct / equalizer / 20kHz / -10pct / output-rate / 192kbps /

  • http标头中的一些参数(例如,响应格式)

  • 身体内的声音。

因此,函数由http方法+ url root定义,参数在body,url tail和header中。对我和开发人员来说,发现我的API似乎都不方便。

除此之外,由于我的大多数用户请求都是唯一的,因此缓存能力并不敏感。

所以,我问你是否我错了以为我应该尝试整合使用REST“哲学”(无状态,可发现,......)的内容供我使用,但只是放弃一部分它是无意义的(可缓存的)或使API奇怪?例如,当你在体内推送一些数据并希望得到转换后的数据时,我是否应该坚持使用HTTP动词?

对我而言,当您管理/使用通过非常简单的路径访问的在线数据库项目时,似乎RESTFull设计变得敏感。当您的API为可能的独特用途创建/转换数据时,似乎不方便。当你有十几个接受各种值的参数时,它似乎很痛苦。

然而,在我看来,肥皂和XML-RPC标准非常难看......

当看起来更明智时,将RESTlike或AsRESTasRelevant设计与json参数/响应相关联是不是很糟糕?

我的案例中要遵循的标准建议吗?

干杯,

文森特

1 个答案:

答案 0 :(得分:0)

REST不是一种哲学。这是一种架构风格 - 一种设计系统以满足某些goals的方式。如果这些目标不是你的,那么REST是一个坏主意。如果是,那么REST是个好主意。我们不知道你的目标是什么,所以我们不知道REST是否适合你。

下一步与REST并不真正有关,它是更通用的Web API设计,

请勿使用该网址包含处理说明。正如你所说,对于非平凡的系统来说,这是完全笨拙的。支持包含一个部分中的处理指令的Multipart个请求和另一个部分中的音频文件,或者将文件上载和处理指令视为两个单独的请求。你甚至可以支持两者。

只是spitballing,如果我试图将其设计为RESTish API,我可能会在附近开始

POST /audio-files

request:
Content-type: audio/midi
<audio file>

response:
201 Created
Location: http://example.com/audio-files/12

-

POST /audio-files

request:
Content-type: multipart/mixed; boundary="simple boundary"
--simple boundary
Content-type: application/json; charset=us-ascii
{
   "echo": "true",
   ...
}
--simple boundary
Content-type: audio/midi; charset=us-ascii
<audio file>
--simple boundary--

response:
200 Ok
Link: <http://example.com/audio-files/12>; rel="audio-file"
<altered-audio-file>

-

POST /altered-audio-files

request:
Content-type: application/json; charset=us-ascii
{
    "audio-file": "http://example.com/audio-files/12"
    "echo": "true",
    ...
}

response:
200 Ok
<altered-audio-file>

这会将音频文件和已更改的音频文件视为资源。这样,当有人想在同一个文件上运行8个转换时,您可以通过保留上传的音频文件来节省电线时间,并且如果您以后选择这样做,则可以选择保留更改的音频文件。如果您想跟踪请求,可以通过添加第三个端点(可能是/audio-requests

轻松实现