Web服务 – 用于数据处理和方法链接的REST API

前端之家收集整理的这篇文章主要介绍了Web服务 – 用于数据处理和方法链接的REST API前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果问题的质量不好,我提前道歉.我仍然开始学习REST API的概念.我正在尝试实现可扩展的REST API进行数据处理.这是我到目前为止可以想到的.

考虑使用GET调用可以检索的一些数值数据:

GET http://my.api/data/123/

用户可以应用一系列算术运算,如加法和乘法.非RESTful的方法是:

GET http://my.api/data/123?add=10&multiply=5

Assupmtions:

> DB中的原始数据未更改.只有其更改的版本才会返回给用户.
>数据大小(比如一个大的多维数组),所以我们无法在每个操作调用时返回整个数据.相反,我们要作为批处理应用操​​作,并返回最终修改的数据.

目前有两种RESTful方式:

模型算术运算作为数据的子资源.

如果我们考虑添加和乘以数据as here的子资源.在这种情况下,我们可以使用:

GET http://my.api/data/123/add/10/

由于原始数据永远不会改变,这将是安全的和幂等的.但是,我们需要链接多个操作.我们可以做到吗

GET http://my.api/data/123/add/10/multiply/5/

其中multiply正在创建一个add / 10 /的子资源,它本身是数据/ 123的子资源

优点:

>无状态:服务器不保存关于修改数据的任何信息.
>轻松访问修改的数据:这只是一个简单的GET调用.

缺点:

链接:我不知道是否可以很容易的实现.
>长URI:应用每个操作,URI越来越长.

2.创建一个可编辑的数据对象:

在这种情况下,用户创建原始数据的可编辑版本:

POST http://my.api/data/123/

将返回

201 Created
Location: http://my.api/data/123/edit/{uniqueid}

用户可以通过PATCH来编辑这个可编辑的数据

PATCH http://my.api/data/123/edit/{uniqueid}
{add:10,multiply:5}

最后,获取编辑的数据

GET http://my.api/data/123/edit/{uniqueid}

优点:

>清理URI.

缺点:

>服务器必须保存已编辑数据的状态.
>编辑不再是幂等的.
>编辑数据要求用户至少进行3次通话.

RESTful实现数据处理有更清洁,更语义的方法吗?

编辑:

如果你想知道背后的真实世界是什么问题,我正在处理数字信号处理.

作为一个简单的例子,您可以考虑将图像过滤器应用于图像.在this example之后,RESTful Web服务可以做到:

GET http://my.api/image/123/blur/5px/rotate/90deg/?size=small&format=png

解决方法

在您的问题中值得一试的几件事情.

基于REST的API是基于资源的

所以看看你的第一个例子,试图将转换属性链接到资源标识符后的URL路径.

GET http://my.api/data/123/add/10/multiply/5/

..不适合(以及复杂的动态实现,如你已经猜到的)

无国籍

REST中的无状态的想法围绕着一个包含足够信息来处理请求并提供结果的单个HTTP调用,而不返回到客户端以获取更多信息.在服务器上存储HTTP调用的结果不是状态,它是缓存.

现在,鉴于基于REST的API可能不是最适合您的使用,如果您仍然希望使用它,您可以选择:

1.使用具有常用URL操作的Querystring

您可以使用Querystring,但简化资源路径以接受单个URI上的所有转换.考虑到你的例子,不愿意存储变换的结果,这可能是你最好的选择.

GET http://my.api/data/123/transform?add=10&multiply=5

2.非RESTful使用POST

您可以使用POST请求,并利用HTTP主体发送转换参数.如果您决定进行大量处理,这将确保您不会在查询字符串上空出空间,并且还会使您的通信更加简洁.如果POST返回图像数据,则这不被认为是RESTful的.

3.使用POST RESTful

最后,如果你决定要缓存的东西,你的POST实际上可以存储转换对象(请注意,REST不会规定如何存储,内存或数据库等),可以通过Id重新获取使用GET.

选项A

POSTing to the URI creates a subordinate resource.

POST http://my.api/data/123
{add:10,multiply:5}

回报

201 Created
Location: http://my.api/data/123/edit/{uniqueid}

然后获取编辑的数据

GET http://my.api/data/123/edit/{uniqueid}

选项B

Remove the resource identifier from the URL to make it clear that you’re creating a new item,not changing the existing one. The resulting URL is also at the same level as the original one since it’s assumed it’s the same type of result.

POST http://my.api/data
{original: 123,add:10,multiply:5}

回报

201 Created
Location: http://my.api/data/{uniqueid}

然后获取编辑的数据

GET http://my.api/data/{uniqueid}
原文链接:https://www.f2er.com/html/225165.html

猜你在找的HTML相关文章