Tag: rest

使用参数Spring RestTemplate GET

我必须进行REST调用,包括自定义标题和查询参数。 我设置我的HttpEntity只有标题(没有主体),我使用RestTemplate.exchange()方法如下: HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); Map<String, String> params = new HashMap<String, String>(); params.put("msisdn", msisdn); params.put("email", email); params.put("clientVersion", clientVersion); params.put("clientType", clientType); params.put("issuerName", issuerName); params.put("applicationName", applicationName); HttpEntity entity = new HttpEntity(headers); HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, params); 这在客户端失败,调度程序servlet无法将请求parsing为处理程序。 Havinfdebugging它,它看起来像请求参数不被发送。 当我使用请求Body和没有查询参数与POST进行交换时,它工作得很好。 有没有人有任何想法?

什么是REST? 有点困惑

我是在假设REST是一个Web服务,但似乎我不正确的想法 – 那么,什么是REST? 我已经读过维基百科,但仍然无法把我的头围绕它。 为什么要做很多地方把API称为REST API?

为什么我们需要RESTful Web服务?

我将学习REST风格的Web服务(最好是说我必须这样做,因为它是CS硕士学位课程的一部分)。 我已经阅读了维基百科中的一些信息,并且在Sun Developer Network上也阅读了一篇关于REST的文章,我发现这不是一件容易的技术,有构buildRESTful应用程序的特殊框架,而且通常与SOAP Web服务和程序员应该明白什么时候使用SOAP,什么时候REST可以是很好的方法。 我记得几年前,SOAP是非常stream行的(时髦?),每一个好的简历都必须包含“SOAP”。 但在实践中,它很less被使用,并且达到了非常简单的目的。 在我看来,REST是另一个“时尚的最后一个字”(或者我可能完全错误,因为我从来没有见过REST的实践)。 你能给我举一些REST应该使用的例子,为什么我们不能在没有REST的情况下做同样的事情(或者为什么我们不花费更多的时间来做同样的事情而不使用REST)呢? 乌兹别克斯坦 :不幸的是,我看不到任何具体的论点,可以在第一个评论中打动我的脑海。 让我觉得REST是真棒技术! 我想看到这样的答案: 我正在开发另一个复杂的HelloWorld应用程序,我们需要传输大量/微小的数据,并向我的同事提出了REST解决scheme: – 哦,该死的! 强尼,我们当然应该使用REST来实现这个应用程序! – 是的,比利,我们可以使用REST,但是我们最好使用SOAP。 相信我,因为我知道开发HelloWorld应用程序的一些东西。 但是SOAP是上个世纪的老式技术,我们可以使用更好的技术。 – 比利,你准备好花3天时间来试用REST吗? 我们可以在2小时内用SOAP来做到这一点。 – 是的,我相信我们会花更多的时间来实现相同的安全/性能/可伸缩性/其他任何与SOAP有关的事情。 我确信HelloWorld应用程序应该从现在开始只用REST开发。

REST,HTTP DELETE和参数

有没有什么非RESTful提供HTTP DELETE请求的参数? 我的情景是,我正在模拟“你确定要删除吗?” 场景。 在某些情况下,资源的状态表明请求的删除可能无效。 您可以自己想象一些需要确认是否需要删除的场景 我们采用的解决scheme是将parameter passing给删除请求,以表明可以继续删除(“?force_delete = true”) 例如 DELETE http://server/resource/id?force_delete=true 我相信它还是宁静的,因为: (a)DELETE的语义没有被改变 – 用户仍然可以发送正常的DELETE请求,但是这可能会失败 ,并且响应的主体将解释原因。 我说可能会失败,因为在某些场合(不值得解释的原因)没有理由提示用户。 (b)在Roy的论文中没有任何内容表明它违背了REST的精神 – 为什么会有,因为HTTP只是REST的一个实现,所以为什么传递的HTTP参数很重要 有人能指出我的一个明确的说法,指出为什么这不是RESTful的原因? 在相关的问题上,如果用户没有指定force_delete,那么我将返回409 Conflict – 是最合适的响应代码? 跟进 经过一些进一步的研究,我认为向DELETE中添加参数可能违反了几个原则。 首先是实现可能违反了“统一接口”(见Roy的论文第5.1.5节) 通过添加'force_delete',我们在已经很好定义的DELETE方法上添加了一个额外的约束。 这个约束只对我们有意义。 你也可以争辩说,它违反了“5.1.2客户端 – 服务器”,因为确认对话实际上是一个用户界面的问题,并不是所有的客户端都要确认删除。 build议任何人?

自定义HTTP授权标题

我想知道是否可以将自定义数据放在HTTP授权标头中。 我们正在devise一个RESTful API,我们可能需要一种方法来指定一个自定义的授权方法。 作为一个例子,我们称之为FIRE-TOKENauthentication。 这样的事情是有效的,并允许根据规范: Authorization: FIRE-TOKEN 0PN5J17HBGZHT7JJ3X82:frJIUN8DYpKDtOLCwo//yllqDzg= 第二个string的第一部分(在':'之前)是API密钥,第二部分是查询string的散列。

JavaScript REST客户端库

是否有一个JavaScript库,允许我执行所有的REST操作(如通过HTTP或HTTPS GET , POST , PUT和DELETE )?

在restcollections中寻呼

我有兴趣将直接的REST接口公开给JSON文档的集合(想想CouchDB或Persevere )。 我遇到的问题是,如果集合很大,如何处理集合根上的GET操作。 作为一个例子假装我暴露了StackOverflow的Questions表,其中每行是作为一个文档公开(而不是必然有这样一个表,只是一个大量的文件集合的具体例子)。 这个集合可以在/db/questions用通常的CRUD api GET /db/questions/XXX , PUT /db/questions/XXX , POST /db/questions 获取整个集合的标准方法是GET /db/questions但是如果这种方式天真地将每行都作为JSON对象转储,那么在服务器上你将得到相当大的下载和很多工作。 解决scheme当然是分页。 Dojo已经在其JsonRestStore中解决了这个问题,通过使用Range标头和自定义范围单元items的聪明的符合RFC2616的扩展。 结果是206 Partial Content仅返回请求的范围。 这种方法在查询参数上的优点是,它留下了查询的查询string(例如, GET /db/questions/?score>200或其他,并且是编码%3E )。 这种方法完全覆盖了我想要的行为。 问题是, RFC 2616指出,在206响应(重点矿): 该请求必须包含一个Range头域( 14.35节 ),表示期望的范围,并且可以包含一个If-Range头域( 14.27节 )来使请求有条件。 这在标题的标准用法的上下文中是有意义的,但这是一个问题,因为我想将206响应作为默认处理初始客户端/随机人员的探索。 我已经详细了解RFC,寻找解决scheme,但是对我的解决scheme感到不满,并且对SO的解决scheme感兴趣。 我有过的想法: 用Content-Range头返回200 ! – 我不认为这是错误的,但我更喜欢如果一个更明显的指标,反应是只有部分内容。 返回400 Range Required – 对于所需的头文件没有特殊的400响应代码,所以必须使用和手动读取默认错误。 这也使得通过网页浏览器(或Resty等其他客户端)更难探索。 使用一个查询参数 – 标准的方法,但我希望允许查询la Persevere,这削减到查询命名空间。 只要返回206 ! – 我认为大多数客户不会被吓倒,但是我不想在RFC中反对 […]

Dogfooding我们自己的限速API

概述: 我的公司开发了一个限速API。 我们的目标是双重的: 答:围绕我们的产品创build一个强大的开发者生态系 B:通过使用它来驱动我们自己的应用程序来演示我们的API的强大function。 澄清:为什么限制费率? 我们评估我们的API的限制,因为我们把它作为我们的产品的一个补充。 匿名访问我们的API对于每小时API调用的阈值是非常低的,而我们的付费客户每小时允许超过1000个电话或更多。 问题: 我们的限速API对于开发者生态系统来说是非常好的,但是为了让我们能够减肥,我们不能把它限制在相同的速率限制之内。 我们的API的前端是所有JavaScript,直接对API进行Ajax调用。 所以问题是: 你如何确保api的速度限制可以消除,在这个过程中去除这样的速度限制不容易被欺骗? 探索解决scheme(以及为什么他们不工作) 根据主机头确认引用者。 – 缺陷,因为推荐人很容易被伪造。 使用HMAC根据请求和共享密钥创build签名,然后在服务器上validation请求。 – 有缺陷,因为秘密和algorithm很容易通过查看前端JavaScript来确定。 代理请求并在代理中签署请求 – 仍有缺陷,因为代理本身暴露了API。 问题: 我正在寻找堆栈溢出的杰出思想来提出备用解决scheme。 你将如何解决这个问题?

RESTful在播放! 骨架

我们正在计划一个主要向移动应用提供内容的项目,但需要有一个网站。 我的问题是使用Jersey或Restlet为我们的移动应用程序开发REST API是否合理,然后使用Play! 为网站服务。 或者只是使用Play更有意义! 做这一切? 如果是这样,如何做与REST REST! 框架?

REST DELETE真的是幂等的吗?

DELETE应该是幂等的。 如果我删除http://example.com/account/123它将删除该帐户。 如果我再次这样做,我会期望一个404,因为该帐户不再存在? 如果我尝试删除一个从未存在的帐户,该怎么办?