Questions tagged «rest»

REST(表示状态传输)是一种用于分布式超媒体系统(例如,万维网)的软件体系结构。相对于RPC体系结构(例如SOAP),由于客户端与服务器之间的固有解耦(由于异构系统之间具有统一的接口),它的流行度有所提高。

4
如何编写用于与外部API交互的集成测试?
首先,我的知识是: 单元测试是那些测试一小段代码(大多数是单一方法)的测试。 集成测试是测试多个代码区域之间的交互的测试(希望它们已经具有自己的单元测试)。有时,被测代码的某些部分需要其他代码以特定方式起作用。这是Mocks&Stubs出现的地方。因此,我们模拟/存根代码的一部分以非常具体地执行。这使我们的集成测试可以预期地运行而没有副作用。 所有测试都应能够独立运行而无需数据共享。如果必须进行数据共享,则表明系统耦合不够充分。 接下来,我面临的情况是: 与外部API(特别是RESTful API,将通过POST请求修改实时数据)进行交互时,我了解我们可以(应该吗?)模拟出与该API的交互(在此答案中更雄辩地说),以进行集成测试。我也了解我们可以对与该API交互的各个组件进行单元测试(构造请求,解析结果,抛出错误等)。我不明白的是如何真正做到这一点。 所以,最后:我的问题。 如何测试与具有副作用的外部API的交互? 谷歌的Content API for shopping是一个很好的例子。为了能够执行手头的任务,需要大量的准备工作,然后执行实际的请求,然后分析返回值。其中一些没有任何“沙盒”环境。 执行此操作的代码通常具有相当多的抽象层,例如: <?php class Request { public function setUrl(..){ /* ... */ } public function setData(..){ /* ... */ } public function setHeaders(..){ /* ... */ } public function execute(..){ // Do some CURL request or some-such } …

10
REST资源网址中的查询字符串
今天,我与一位同事讨论了在REST URL中使用查询字符串的问题。举两个例子: 1. http://localhost/findbyproductcode/4xxheua 2. http://localhost/findbyproductcode?productcode=4xxheua 我的立场是应按照示例1那样设计URL。这更加简洁,我认为在REST中是正确的。在我看来,如果产品代码不存在,从示例1返回404错误将是完全正确的,而在示例2中返回404错误将是错误的,因为页面应该存在。他的立场是,这并不重要,他们俩都做同样的事情。 由于我们俩人都找不到具体的证据(诚然,我的搜索范围不广),所以我想了解其他人对此的看法。
76 rest 

5
将API密钥放在标题或URL中
我正在为公司的数据设计一个公共API。我们希望应用程序开发人员注册API密钥,以便我们可以监视使用情况和过度使用情况。 由于该API是REST,因此我最初的想法是将该密钥放在自定义标头中。这就是我看到Google,Amazon和Yahoo做到这一点的方式。另一方面,我的老板认为,如果密钥仅成为URL的一部分等,则该API更易于使用。“ http://api.domain.tld/longapikey1234/resource ”。我想对此有话要说,但是它违反了URL的原理,URL是您想要的简单地址,而不是您想要的方式或原因。 您觉得将密钥放入URL是否合乎逻辑?或者,如果将简单的JavaScript前端写入某些数据,您是否不必手动设置HTTP标头?

2
我应该在公共API中使用UUID作为资源吗?
我正在构建一个SaaS应用程序,并希望公开与当前数据存储实现无关的资源ID(Postgres自动增量ID)。这些Stack Overflow帖子(一 两篇)表明,创建本地唯一的ID很困难,我不妨使用UUID,UUID当然可以用几乎所有语言轻松,安全地生成。 我对这种方法感到满意,但我想知道为什么找不到大型SaaS /托管播放器中的任何API都这样做吗?例如: Shopify:9位数字 Twilio:34个字符串 Twitter:20位数以上的数字 AMEE:12个字符A-Z0-9 因此,基本上没有人似乎使用UUID。这是否有原因-不是在这里发明的,更聪明的内部ID算法还是其他?就我而言,在没有任何内部算法的情况下,使用UUID是否最有意义?
76 api  rest 

3
应该以表格形式使用PUT和DELETE吗?
假设我的Web应用程序在服务器端完全支持PUT和DELETE,我应该使用它们吗? 基本上我的问题是有多少浏览器支持此功能: <form method="PUT"> 要么 <form method="DELETE"> 除了符合REST之外,使用这两种HTTP方法还有什么好处?(假设这两种方法的替代品是常用的POST)

2
使用Websockets代替RESTful HTTP有什么陷阱?
我目前正在从事一个项目,该项目要求客户端请求一项繁重的工作并将其发送到服务器。然后,服务器对作业进行划分,并为客户端提供一个URL数组,以进行GET调用并流回数据。我是该项目的新手,目前正在使用Spring Websocket来提高效率。Websocket现在将直接联系客户端hooray,而不是客户端不断ping服务器以查看是否有准备好流回的结果。 让websockets从头到尾管理整个过程是否是一个坏主意?我正在将STOMP与Spring websockets一起使用,放弃REST还会有重大问题吗?

3
RESTful-DELETE响应主体应包含什么
假设我有一个可以获取用户的API: GET /RESTAPI/user/ 您可以通过以下方式删除用户: DELETE /RESTAPI/user/123 关于DELETE的响应主体应包含的RESTful约定是什么?我希望它应该是所有用户的新列表,现在不再包含ID为123的用户。 谷歌搜索并没有给我任何令人满意的答案。我只找到有关如何执行此操作的意见,但是对RESTful服务没有严格的定义吗? 这与RESTful API POST / DELETE应该在主体中返回什么不重复?以及约定应返回哪些REST PUT / POST / DELETE调用? 因为此问题要求对DELETE进行严格定义。这些问题仅由宽松的意见回答。
76 rest  http  restful-url 


8
使用POST而不是GET的REST API
假设服务提供了一些我可以像这样使用的功能: GET /service/function?param1=value1&param2=value2 我可以在POST查询中使用它吗? POST /service/function { param1 : value1, param2 : value2 } 这两个查询是否相同?我可以在任何情况下使用第二种变体,或者文档中应明确指出可以同时使用GET和POST查询?
76 api  rest  post  get 

8
JAX-RS发布多个对象
我有办法 @POST @Path("test") @Consumes(MediaType.APPLICATION_JSON) public void test(ObjectOne objectOne, ObjectTwo objectTwo) 现在我知道我可以将一个对象以json格式发布,只需将其放入正文即可。但是可以做多个对象吗?如果是这样,怎么办?
75 java  rest  jax-rs 

5
Java REST实现:Jersey vs CXF
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 7年前关闭。 改善这个问题 您认为这两个库之间的优缺点是什么?这两个中哪一个最适合生产环境?顺便说一下,我将使用JSON而不是XML。 我也想知道社区最支持哪种库,例如教程,文档。

2
无法在HttpResponseMessage标头上设置Content-Type标头?
我正在使用ASP.NET WebApi创建RESTful API。我正在一个控制器中创建一个PUT方法,代码如下所示: public HttpResponseMessage Put(int idAssessment, int idCaseStudy, string value) { var response = Request.CreateResponse(); if (!response.Headers.Contains("Content-Type")) { response.Headers.Add("Content-Type", "text/plain"); } response.StatusCode = HttpStatusCode.OK; return response; } 当我通过浏览器通过AJAX放置到该位置时,它给了我这个异常: 标头名称滥用。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。 但是Content-Type响应不是完全有效的标头吗?为什么会出现此异常?

4
使用PHPStorm或POSTman的XDebug和RESTful服务器
如何获得REST客户端(例如内置于PHPStorm或POSTman的REST客户端)以使用XDebug? 在我当前的XDebug设置中,使用PHPStorm和Bookmarklet提供了能够在Chrome和Firefox上运行的功能-但是,一旦我尝试使用POSTman或任何其他REST客户端,我就不知道该怎么做。开始。 干杯。
75 rest  xdebug  phpstorm 

5
尝试使用Spring Boot REST从POST读取JSON字符串
我正在使用最新版本的Spring Boot通过Restful Web Service读取示例JSON ... 这是我的pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>myservice</artifactId> <version>0.1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.2.RELEASE</version> </parent> <properties> <java.version>1.7</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-rest-webmvc</artifactId> </dependency> <dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> …

4
PHP cURL HTTP PUT
我正在尝试使用cURL创建一个HTTP PUT请求,但无法使其正常工作。我已经阅读了许多教程,但没有一个真正起作用。这是我当前的代码: $filedata = array('metadata' => $rdfxml); $ch = curl_init($url); $header = "Content-Type: multipart/form-data; boundary='123456f'"; curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array($header)); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($filedata)); $returned = curl_exec($ch); if (curl_error($ch)) { print curl_error($ch); } else { print 'ret: ' .$returned; } 我也尝试使用PHP …
75 php  rest  curl  put  http-put 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.