相关疑难解决方法(0)

如何处理REST API中的大量资源

我正在将一个REST接口用于现有应用程序,我很好奇最合适的解决方案是什么来处理资源,如果要检索它们将返回过多的数据.

该应用程序是现有的时间表系统,其中一个资源是一组用户的"时间段".这些资源的示例URI是:

/users/44/timeslots/
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多与如何为此资源提供过滤以检索子集有关的问题,我已经有了解决方法.

我想知道如何(或者如果)我应该处理在上面的URI上发出GET将从数十或数十万行返回兆字节数据的情况,并且需要相当数量的服务器资源来实际响应第一名.

  • 在这些情况下,是否存在惯例使用的HTTP响应?
    我发现HTTP代码413与Request实体相关,该实体太大,但不适用于当Response实体太大时
  • 是否存在限制响应或告诉客户这是一个愚蠢的请求的替代约定?
  • 我应该让服务器遵守这个大规模的请求吗?

编辑:要清楚,我已经过滤和拆分实现的资源,并考虑了其他大型集合资源的分页.我想适当地回应那些没有意义的请求(显然是由构建URI的客户端请求的).

rest

12
推荐指数
1
解决办法
7728
查看次数

如果结果集可以更改,如何使用RESTful API实现强大的分页?

我正在实现一个RESTful API,它将Orders作为资源公开,并通过结果集支持分页:

GET /orders?start=1&end=30
Run Code Online (Sandbox Code Playgroud)

分页的订单按ordered_at时间戳排序,降序排序.这基本上是REST Web应用程序中 SO问题分页的方法#1 .

如果用户请求订单的第二页(GET /orders?start=31&end=60),则服务器只需重新​​查询订单表,ordered_at DESC再次排序并返回位置31到60的记录.

我遇到的问题是:如果在用户查看记录时结果集发生变化(例如添加了新订单)会发生什么?在添加新订单的情况下,用户将在第二页结果的第一个位置看到旧订单#30(因为相同的订单现在是#31).更糟糕的是,在删除的情况下,用户在第二页(#31)的第一个位置看到旧订单#32,并且根本看不到旧订单#31(现在#30).

如果不以某种方式使RESTful服务器有状态(urg)或为每个客户端构建一些分页智能,我无法看到解决方案......有哪些已建立的技术可以解决这个问题?

为了完整性:我的后端是在Scala/Spray/Squeryl/Postgres中实现的; 我正在构建两个前端客户端,一个在backbone.js中,另一个在Python Django中.

rest scala backbone.js

7
推荐指数
1
解决办法
2969
查看次数

使用REST API编辑可编辑的jQuery Grid Recommendations

首先,我已经阅读了" jQuery Grid Recommendations " 这个问题,但它没有回答我的问题.

我有一个与MongoDB后端的小型REST API:

获得所有设备:

GET /equipements HTTP/1.1
{{_id:key1, name:Test Document 1, plateforme:prod}, {_id:key2, name:Test Document 2, plateforme:prod}, ...}
Run Code Online (Sandbox Code Playgroud)

使用密钥获取设备:key1

GET /equipements/key1 HTTP/1.1
{"_id": "key1", "name": "Test Document 1", "plateforme": "prod"}
Run Code Online (Sandbox Code Playgroud)

添加新设备

PUT /equipements HTTP/1.1  {"_id": "key8", "name": "Test Document 3", "plateforme": "prod"}
HTTP/1.0 200 OK
Run Code Online (Sandbox Code Playgroud)

现在,我需要找到一种简单的方法来允许lambda用户添加/查看/ del设备.所以我认为一个像UI这样的jQuery的Web界面是最好的.我尝试 使用Sencha Rest Proxy,但我不知道javascript,我无法适应这个例子.

如何修复我的REST后端的JavaScript?

AND/OR

你能推荐一个比Sencha Rest Proxy更简单的替代品吗?(适用于我的REST后端)

答案: jqGrid

AND/OR

你会推荐我什么jQuery Grid?(适用于我的REST后端)

答案: jqGrid

最后一个问题:为什么双击时我的单元格不可编辑? …

javascript rest grid jquery jqgrid

7
推荐指数
1
解决办法
5220
查看次数

如何处理来自REST服务的大量数据

我们正在使用返回大量数据的REST服务.在生产中,服务器硬件可以处理它.我需要通过获取本地计算机上的数据来测试REST服务,这些数据无法处理大量数据.我的本地机器是4G i5.每次我点击服务时,我都会出现内存异常.

response.getStatus() 返回200状态.但是在使用输入流读取器收集数据时,我得到了内存不足的异常.

BufferedReader br = new BufferedReader(new
InputStreamReader(newByteArrayInputStream(response.getEntity().getBytes())));
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来收集数据而不会遇到内存异常?

我尝试将我的VM大小推到2G,但它仍然无效.

java rest web-services restful-url restful-architecture

6
推荐指数
1
解决办法
1万
查看次数

REST Web应用程序中的分页

通常,用户进行搜索,获取命中列表,然后可以浏览它.hitlist是一个中间结果,在整个浏览过程中保持一致,通常存储在会话状态中.例如,如果新项目由其他项目同时添加,则它们仅出现在后续搜索中.

在REST应用程序中,我不能轻易获得这个中间结果 - 它既不属于客户端,也不属于模型.我在REST网络应用程序中阅读了分页,但我的答案并不完全清楚.那里的解决方案似乎假设在用户浏览结果时不更新模型.

我们当然可以将世界(模型)想象成一系列不可变的快照.通过提供一个时间戳(或全球版本号),我们就得到了模型的一致视图在那个时候,这从概念的角度来看解决了这个问题.但它确实意味着模型的完整版本.(我也想知道是否有与函数式编程相关的连接)

我该如何处理这个问题?

注意:我问,因为我打算使用play框架,它根本没有HTTP状态或会话的概念; 这是纯粹的宁静.

java rest pagination playframework

5
推荐指数
2
解决办法
4100
查看次数

RESTful服务中的分页

我有一个可以返回大量项目的RESTful API,我希望能够使用分页样式技术来限制项目数量,这在RESTful API中是个好主意吗?

如果可能最好通过链接(在这种情况下为url)或请求正文的一部分来完成?

干杯

AWC

rest pagination

4
推荐指数
1
解决办法
3800
查看次数

Rails RESTful应用程序中的分页和排序

有关如何在Rails应用程序中的资源上实现排序和分页并仍保持RESTful的任何提示?

如何以干净的方式映射页码和排序字段的参数?(我目前正在为我的应用中的每个资源使用map.resources:x)

我应该知道的任何其他性能问题?(例如缓存)

提前致谢.

编辑我将问题重新制定为更通用的问题,希望我能得到更多答案.我打算投票结束这个,因为它不再相关.感谢insane-dreamer和vrish88的答案.

sorting rest pagination ruby-on-rails

1
推荐指数
1
解决办法
6184
查看次数