我有一个有关REST的urldevise的问题。 我在这里find了一些相关的post: 不同的RESTful表示相同的资源 ,在这里: RESTful URL GET资源由不同的领域,但答复是不是很清楚最佳做法是什么,为什么。 这是一个例子。 我有代表“用户”资源的RESTurl。 我可以通过一个ID或一个电子邮件地址来获得一个用户,但是URL表示对于两者都是一样的。 通过大量的博客和书籍,我发现人们以许多不同的方式来做这件事。 例如 阅读这本书,并在一个地方stackoverflow(我似乎无法find链接) GET /users/id={id} GET /users/email={email} 在很多博客上阅读这个练习 GET /users/{id} GET /users/email/{email} 查询参数通常用于过滤由url表示的资源的结果,但我也看到了这种做法 GET /users?id={id} GET /users?email={email} 我的问题是,在所有这些做法中,哪一个最适合开发者使用apis,为什么? 我相信在REST的网页devise和命名规则方面没有任何规定,但我只是想知道应该采取哪条路线来帮助开发人员更好地理解API。 所有帮助赞赏!
如何从PowerShell脚本调用基于rest的API并处理Json答案?
我们正在使用REST API开发服务器,它接受和响应JSON。 问题是,如果你需要从客户端上传图片到服务器。 另外请注意,我正在谈论的用例,其中实体(用户)可以有文件(carPhoto,licensePhoto),也有其他属性(名称,电子邮件…),但是当你创build新的用户,你不会发送这些图像,在注册过程后添加。 我知道的解决scheme,但他们每个人都有一些缺陷 1.使用multipart / form-data而不是JSON 好 :POST和PUT请求尽可能RESTful,它们可以包含文本和文件一起input。 缺点 :不再是JSON,与multipart / form-data相比,testing,debugging等更容易 2.允许更新单独的文件 POST请求创build新用户不允许添加图像(这在我们的使用情况下是如何说,我开始说),上传图片是由PUT请求作为multipart / form-data例如/ users / 4 / carPhoto 好 :除了file upload以外,所有东西都保存在JSON中,很容易testing和debugging(你可以logging完整的JSON请求而不用担心它们的长度) 缺点 :这不是直观的,你不能一次POST或PUT实体的所有variables,也可以认为这个地址/users/4/carPhoto更多的集合(REST API的标准用例看起来像这样/users/4/shipments )。 通常你不能(并不想)GET / PUT实体的每个variables,例如用户/ 4 /名称。 您可以使用GET获取名称,并在用户/ 4处使用PUT更改它。 如果id后面有东西,通常是另一个集合,比如users / 4 / reviews 3.使用Base64 将它作为JSON发送,但使用Base64编码文件。 好 :与第一种解决scheme相同,它是尽可能的RESTful服务。 缺点 :testing和debugging再次糟糕得多(主体可能有兆字节的数据),在客户端和服务器上都有增加的大小和处理时间 我真的很想用解决scheme没有。 2,但它有其缺点…任何人都可以给我一个更好的“什么是最好的”解决scheme的见解? 我的目标是尽可能多地包含尽可能多的RESTful服务,而我希望尽可能简单。
在我正在处理的Web服务中,我需要实现一个URI查询参数,类似于/stats?store=A&store=B&item=C&item=D 要分解它,我需要能够使用查询参数来指定来自多个/所有商店的数据以及来自这些商店的多个/所有项目的数据。 到目前为止,我已经能够实现一个查询参数,以拉动项目数据,但是我失去了如何实现更多的查询,似乎无法find我之前见过的资源与此实现。 到目前为止,我的方法是沿着 @GET @Path("stats") public String methodImCalling(@DefaultValue("All") @QueryParam(value = "item") final String item) { /**Run data using item as variable**/ return someStringOfData } 这对于一个项目来说工作得很好,如果我不在URI中input参数,它将返回所有的数据。 但是,我不确定如何处理更多的参数。 更新 : 我已经想通过简单地向方法添加第二个参数如何使用2个不同的参数,如下所示: public String methodImCalling(@DefaultValue("All") @QueryParam(value = "store") final String store, @DefaultValue("All") @QueryParam(value = "item") final String item) 问题仍然是如何实现同一个参数的多个值。
我有一个API端点和Authtoken该API 该API是.XLS报告下载,我怎样才能查看下载的.xls文件使用(如果可能)POSTMAN? 如果使用邮递员是不可能的,那么我应该寻找哪些其他编程方式?
我正在通过Zend_Rest_Route使用Zend Framework构build一个RESTful API。 对于file upload,我应该使用PUT还是POST来处理这个过程? 我试图尽可能与REST动词的定义保持一致。 请参考: PUT或POST:故事的REST 我理解这一点的方式是,当且仅当我更新指定资源的完整内容时,我应该使用PUT。 我将不得不知道要input的确切URL。 另一方面,我应该使用POST,如果我发送一个命令到服务器创build一个指定资源的下属,使用一些服务器端algorithm。 假设这是一个用于图片上传的REST API。 这是否意味着我应该使用POST如果服务器是操纵图像文件(即创build缩略图,resize等); 并使用PUT,如果我只是简单地将图像原始文件保存到服务器? 如果我使用PUT来处理file upload,那么过程如下: 用户发送GET请求来检索要放置到的文件的特定URL。 然后用户从GET响应发送PUT请求到URL。 正在上传的文件与用户上传完全一样。 我对这个东西相当陌生, 所以希望我在这里有道理… 如果你知道这个“最好”的方法,请随时发表评论。
我正在尝试修改Spring Boot网站上的REST Controller示例。 不幸的是,当我尝试访问localhost:8080/item URL时,出现以下错误。 { "timestamp": 1436442596410, "status": 404, "error": "Not Found", "message": "No message available", "path": "/item" } POM: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SpringBootTest</groupId> <artifactId>SpringBootTest</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <javaVersion>1.8</javaVersion> <mainClassPackage>com.nice.application</mainClassPackage> <mainClass>${mainClassPackage}.InventoryApp</mainClass> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>${javaVersion}</source> <target>${javaVersion}</target> </configuration> </plugin> <!– Makes the Spring Boot app executable for a jar […]
我无法弄清楚如何在HBase REST接口(HBase 0.90.4-cdh3u3)中使用filter。 文档只是给了我一个“string”的架构定义,但没有显示如何使用它。 所以,我可以这样做: curl -v -H 'Content-Type: text/xml' -d '<Scanner startRow="ddo" stopRow="ddp" batch="1024"/>' 'http://hbasegw:8080/table/scanner' 然后检索 curl -s -H "Content-Type: text/xml" http://hbasegw:8080/table/scanner/13293426893883128482b | tidy -i -q -xml 但是现在我想使用SingleColumnValueFilter,并且必须以某种方式在XML中进行编码。 有没有人有这样的例子? 谢谢,马里奥
我明白为什么“REST框架”供应商希望提供返回基于Json的表示和基于XML的表示forms的支持, 但为什么人们希望从同一个服务返回 ? 是否因为您将有一个客户端应用程序构build在没有可用的Jsonparsing器的平台上? 是因为你希望更广泛地采用界面,因为你可以吸引更多的人 ? 是否因为你认为所有RESTful接口遵循标准惯例 ? 如果你确实交付两个: 您是否避免使用XML中的名称空间,以便与Json格式兼容? 或者,你的所有数据元素只有一个名称空间? 你有什么标准化的机制来将属性和元素映射到某种一致的Json格式,或者你是否避免在你的XML中的属性? 您是否为每个表示创build不同的端点 ,还是使用内容协商来提供所需的格式? 你有一个默认的格式? 如果在可编辑资源上使用caching并使用不同的URL,那么如何确保当一个表示无效时其他表示也失效? 你觉得支持多种格式的好处是值得所需的努力 ? 回应摘要: 所以主要原因似乎是偏好之一。 有些开发人员更喜欢花括号,有些更喜欢尖括号。 有些人希望从XML迁移到Json,因此支持这两者是向后兼容所必需的。 有些人想使用Json,但担心一些开发人员会害怕Json,所以他们都支持这两个,以免得罪任何人。 在框架XYZ中很容易打开这个function,所以为什么不呢? 另一个有趣的推荐原因是,JSON可以用来提供一个快速的脏数据摘要,XML可以用作语义丰富的完整表示。
我的应用程序在/foo有一个资源。 通常情况下,它是这样的HTTP响应负载: {"a": "some text", "b": "some text", "c": "some text", "d": "some text"} 客户端并不总是需要这个对象的全部四个成员。 什么是RESTfully语义的方式让客户告诉服务器在表示中需要什么? 如果它想要: {"a": "some text", "b": "some text", "d": "some text"} 它应该如何GET它? 一些可能性(如果我误解了REST,我正在寻找更正): GET /foo?sections=a,b,d 。 查询string(毕竟称为查询string)似乎意味着“查找与此条件匹配的资源并告诉我有关它们”,而不是“根据此自定义向我表示此资源”。 GET /foo/a+b+d我最喜欢的是REST语义不包含这个问题 ,因为它的简单性。 打破URI不透明,违反HATEOAS。 似乎打破资源(URI的唯一含义是识别一个资源)和表示之间的区别。 但这是值得商榷的,因为它与代表/widget/<id>资源的可视列表/widget/<id>一致,这是我从来没有遇到的问题。 松开我的约束,对GET /foo/a等做出响应,并让客户端对每个/foo组件的请求进行请求。 如果/foo有数百个组件,而客户端需要100个组件,那么开销就会增加,这可能会变成一场噩梦。 如果我想支持/foo的HTML表示,我必须使用Ajax,如果我只想要一个可以被抓取,由极简主义浏览器渲染的HTML页面,这是有问题的。 为了维护HATEOAS,它还需要指向其他表示中存在的那些“子资源”的链接,可能在/foo : {"a": {"url": "/foo/a", "content": "some text"}, …} GET /foo , Content-Type: […]