Questions tagged «rest»

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

3
REST:通过一个请求更新多个资源-是标准的还是要避免的?
一个简单的REST API: GET:items / {id}-返回具有给定id的商品的描述 PUT:items / {id}-更新或创建具有给定id的项目 删除:items / {id}-删除具有给定id的项目 现在有问题的API扩展: GET:item?filter-返回与过滤器匹配的所有项目ID PUT:项目-更新或创建一组由JSON有效负载描述的项目 [[ DELETE:items-删除由JSON有效负载描述的项目列表]] <-不正确 现在,我对DELETE和PUT操作回收功能感兴趣,可以通过PUT / DELETE项目/ {id}轻松访问该功能。 问题:提供这样的API是否常见? 备选方案:在单连接多个请求时代,发出多个请求很便宜,并且由于更改成功或失败而工作起来更加原子,但是在NOSQL数据库时代,即使请求处理终止,列表中的更改也可能已经发生。内部服务器或出于任何原因的任何原因。 [更新] 在考虑了白宫Web标准和维基百科:REST示例之后,现在使用以下示例API: 一个简单的REST API: GET:items / {id}-返回具有给定id的商品的描述 PUT:items / {id}-更新或创建具有给定id的项目 删除:items / {id}-删除具有给定id的项目 顶级资源API: GET:item?filter-返回与过滤器匹配的所有项目ID POST:项目-更新或创建一组由JSON有效负载描述的项目 不支持/禁止在/ items上执行PUT和DELETE。 使用POST似乎可以解决问题,因为它是一种在封闭资源中创建新项目而不是替换而追加的方法。 HTTP语义POST读取: 通过追加操作扩展数据库 PUT方法需要替换完整的集合以便返回HTTP语义PUT引用的等效表示形式: 给定表示的成功PUT建议,在同一目标资源上进行后续GET将导致在200(OK)响应中返回等效表示。 [UPDATE2] 对于多个对象的更新方面而言似乎更加一致的替代方法似乎是PATCH方法。RFC 5789草案中将PUT和PATCH之间的区别描述为: PUT和PATCH请求之间的差异体现在服务器处理封闭实体以修改由Request-URI标识的资源的方式。在PUT请求中,封闭的实体被视为原始服务器上存储的资源的修改版本,并且客户端正在请求替换存储的版本。但是,对于PATCH,封闭的实体包含一组指令,这些指令描述了应如何修改当前驻留在源服务器上的资源以产生新版本。PATCH方法影响由Request-URI标识的资源,并且可能对其他资源也有副作用。也就是说,可以通过应用PATCH来创建新资源或修改现有资源。 …
75 json  rest 

2
在不使用Spring Boot的情况下创建Spring Rest服务
我已经按照spring.io上的入门教程构建了REEST服务https://spring.io/guides/gs/rest-service/。问题在于,本教程仅说明如何使用Spring Boot生成嵌入了tomcat的独立运行jar。 有没有一种方法可以从头开始创建项目,从而产生战争,例如将其部署在已经存在的tomcat实例上? PS:关于相同的问题,我在stackoverflow上的Tomcat中找到了先前的Spring RESTful Service作为WAR而不是JAR的线程。问题是,已接受的答案和建议不能完全解决我的问题,因为我没有在寻找修改独立应用程序spring boot项目的方法,以便它可以在外部tomcat容器上工作,但希望找到一个根本不涉及弹簧启动的“清洁”解决方案。(我不确定在这里如何表现,在stackoverflow上还是很新的。我希望打开一个新问题是正确的过程)。
74 java  spring  rest  tomcat 

6
改造2 @path vs @query
我是Retrofit 2库的新手。我读了几篇入门的文章,并设法从RESTful API中获取XML数据而未指定参数。生成XML资源的方法如下。 @GET @Path("/foods") @Produces(MediaType.APPLICATION_XML) public List<FoodPyramid> getFoodPyramid() { Session session = HibernateUtil.getSessionFactory().openSession(); trans = session.beginTransaction(); List<FoodPyramid> foodList = session.createQuery("from FoodPyramid").list(); try { trans.commit(); session.close(); } catch (Exception e) { session.close(); System.err.println("Food Pyramid fetch " + e); } System.err.println("Am in the food modal. . . . . . . …
74 java  android  rest  retrofit2 


10
Windows的图形HTTP客户端
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 我正在寻找用于执行HTTP操作的Windows图形实用程序。 例如,我希望能够说些类似的话: 通过POST正文发布到http://example.org/test/service:“数据在这里” 有人知道这样做的好软件吗?
73 windows  http  rest  client 

17
无法建立连接,因为目标计算机主动拒绝了127.0.0.1:3446
我使用的是WCF4.0模板- REST。我正在尝试制作一种使用流上传文件的方法。 问题总是发生在 Stream serverStream = request.GetRequestStream(); 流类: namespace LogicClass { public class StreamClass : IStreamClass { public bool UploadFile(string filename, Stream fileStream) { try { FileStream fileToupload = new FileStream(filename, FileMode.Create); byte[] bytearray = new byte[10000]; int bytesRead, totalBytesRead = 0; do { bytesRead = fileStream.Read(bytearray, 0, bytearray.Length); totalBytesRead …
73 c#  wcf  rest  httpwebrequest 

3
是否有通用Python库可以使用基于REST的服务?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 好。我想使用基于REST的服务。 我想使用python。实际上,我将使用python。 我想使用它的方式是从命令行/ ipython尝试不同的REST服务,以期稍后对其进行正式编码。(我对REST服务的使用不是通用的api) 我正在寻找Python中非常通用的,功能齐全的REST客户端/ API。不是裸露的骨头,而是毛绒,很好用。其中有很多,但是我有点想安顿下来并掌握它。 有什么建议? 编辑:这是一个: https://github.com/benoitc/restkit 编辑:http : //pypi.python.org/pypi/requests 就是它。 编辑:http : //pypi.python.org/pypi/siesta 一样完美!
73 python  rest 

7
对重新创建的活动实施Retrofit回调的最佳实践?
我将改用Retrofit,并尝试了解将其与异步回调配合使用的正确体系结构。 例如,我有一个接口: interface RESTService{ @GET("/api/getusername") void getUserName(@Query("user_id") String userId, Callback<Response> callback); } 我从主要活动中运行它: RestAdapter restAdapter = new RestAdapter.Builder() .setServer("WEBSITE_URL") .build(); RESTService api = restAdapter.create(RESTService.class); api.getUserName(userId, new Callback<Response> {...}); 然后用户旋转设备,并且我有新创建的活动...这里发生了什么?如何获得对新活动的响应(我假设在后台进行的api调用的执行时间将比第一个活动寿命长)。也许我必须使用静态的回调实例还是什么?请告诉我正确的方法...

3
确保REST API的安全而不用费吹灰之力
在设计REST API时,通常先对用户进行身份验证吗? 我正在寻找的典型用例是: 用户想要获取数据。当然,我们喜欢分享!获取公共API密钥并阅读! 用户想要存储/更新数据...等等!你是谁,你能做到吗? 我想一次构建它,并允许说一个Web应用程序,一个Android应用程序或一个iPhone应用程序来使用它。 REST API似乎是符合此类要求的合理选择 为了说明我的问题,我将使用一个简单的示例。 我在数据库中有一个项目,该项目具有等级属性(1到5的整数)。 如果我正确理解REST,则将使用我选择的返回CSV,XML或JSON的语言来实现GET请求,如下所示: http://example.com/product/getrating/{id}/ 假设我们选择JSON,我们返回: { "id": "1", "name": "widget1", "attributes": { "rating": {"type":"int", "value":4} } } 这对于面向公众的API很好。我明白了。 我有很多问题要问,如何将其与安全模型结合起来?我习惯了Web应用程序安全性,在该状态下,我始终具有标识用户的会话状态,因此无论他们决定发送给我什么,我都可以控制他们可以做什么。据我了解,这不是RESTful的,因此在这种情况下将是一个不好的解决方案。 我将尝试使用相同项目/等级的另一个示例。 如果用户“JOE”希望将添加评级到项目 可以使用以下方法完成: http://example.com/product/addrating/{id}/{givenRating}/ 在这一点上,我想存储表示“ JOE”给予产品{id}等级为{givenRating}的数据。 问题:我怎么知道请求来自“ JOE”而不是“ BOB”。 此外,如果要获取更敏感的数据(例如用户的电话号码)怎么办? 到目前为止,我得到的是: 1)使用HTTP的内置功能对每个请求(纯HTTP或HTTPS)进行身份验证。 这意味着现在每个请求都采用以下形式: https://joe:joepassword@example.com/product/addrating/{id}/{givenRating}/ 2)使用带有私钥和公钥的Amazon S3之类的方法:http : //www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ 3)无论如何都要使用cookie并破坏REST的无状态部分。 第二种方法对我来说似乎更好,但我想知道我是否真的必须重新发明整个东西?自己哈希,存储,生成密钥等? 这听起来很像在典型的Web应用程序中使用会话并自己重写整个堆栈,这对我来说通常意味着“您做错了”,尤其是在处理安全性时。 编辑:我想我也应该提到OAuth。

7
通过REST(RESTful)API进行批量收集操作
我想要有关设计REST API的一些建议,该API将允许客户端有效地向集合中添加/删除大量对象。 通过API,客户需要能够向集合中添加项目,从集合中删除项目以及操纵现有项目。在许多情况下,客户可能希望对该集合进行批量更新,例如添加1000个项目并删除500个不同的项目。感觉客户端应该能够在与服务器的单个事务中完成此任务,而不是需要1000个单独的POST请求和500个DELETE。 是否有人有关于实现此目标的最佳做法或惯例的信息? 我目前的想法是,应该能够PUT一个代表集合URI更改的对象,但这似乎与HTTP 1.1 RFC不一致,后者似乎建议在PUT请求中发送的数据应独立于数据包的解释。 URI中已经存在的数据。这意味着客户端将必须一次性发送对集合的新状态的完整描述,该描述可能远远大于更改,甚至超过客户端发出请求时所知道的范围。 显然,如果有必要,我很乐意偏离RFC,但如果存在这样的约定,则宁愿以常规方式进行操作。
73 http  rest 

4
将额外的参数传递给Django Rest Framework中的Serializer类
我想将一些参数从Viewset传递给DRF Serializer类,因此我已经尝试过: class OneZeroSerializer(rest_serializer.ModelSerializer): def __init__(self, *args, **kwargs): print args # show values that passed location = rest_serializer.SerializerMethodField('get_alternate_name') def get_alternate_name(self, obj): return '' class Meta: model = OneZero fields = ('id', 'location') 观看次数 class OneZeroViewSet(viewsets.ModelViewSet): serializer_class = OneZeroSerializer(realpart=1) #serializer_class = OneZeroSerializer queryset = OneZero.objects.all() 基本上,我想将基于查询字符串的一些值从视图传递给Serializer类,然后将这些分配给字段。 这些字段实际上不包含在“模型”中,而是动态创建的字段。 这个问题stackoverflow中的情况相同,但我无法理解答案。 在这种情况下,任何人都可以帮助我或为我提供更好的选择。

7
将EJB注入JAX-RS(RESTful服务)
我试图通过注释将无状态EJB注入到JAX-RS Web服务中。不幸的是,EJB是正义的null,NullPointerException当我尝试使用它时我得到了。 @Path("book") public class BookResource { @EJB private BookEJB bookEJB; public BookResource() { } @GET @Produces("application/xml") @Path("/{bookId}") public Book getBookById(@PathParam("bookId") Integer id) { return bookEJB.findById(id); } } 我究竟做错了什么? 以下是有关我的机器的一些信息: 玻璃鱼3.1 Netbeans 6.9 RC 2 Java EE 6 你们能举个可行的例子吗?
72 java  rest  jakarta-ee  ejb  jax-rs 

4
如何在RESTful API中处理对象层次结构?
我目前正在为现有的PHP应用程序设计API,为此,我正在研究REST作为一种明智的体系结构方法。 我相信我对关键概念有一个合理的了解,但是我正在努力寻找能够解决对象层次结构和REST的人。 这是问题所在... 在[应用程序]业务对象层次结构中,我们有: Users L which have one-to-many Channel objects L which have one-to-many Member objects 在应用程序本身中,我们使用延迟加载方法根据需要用这些对象的数组填充User对象。我相信用面向对象的术语讲,这是对象聚合,但是我已经看到了各种命名不一致的问题,并且不关心就精确命名约定发动战争。 现在,考虑一下我有一些松散耦合的对象,这些对象可能会/可能不会填充,这取决于应用程序的需求。 从REST的角度来看,我正在尝试确定应采用的方法。这是我目前的想法(暂时仅考虑GET): 选项1-完全填充对象: GET api.example.com/user/{user_id} 读取User对象(资源),并返回带有所有可能的Channel和Member对象的用户对象,并预先加载和编码(JSON或XML)。 优点:减少对象数量,无需遍历对象层次结构 缺点:必须完全填充对象(昂贵) 选项2-填充主要对象,并包括指向其他​​对象资源的链接: GET api.example.com/user/{user_id} 读取用户对象(资源),并返回用户对象填充的用户数据和两个列表。 每个列表都引用适当的(子)资源,即 api.example.com/channel/{channel_id} api.example.com/member/{member_id} 我认为这与超媒体的含义很接近(或完全一样)-客户端可以根据需要获取其他资源(只要我合理地标记它们)。 优点:客户端可以选择加载下属,否则,可以更好地分离对象作为REST资源。 缺点:需要进一步的行程才能获得辅助资源 选项3-启用递归检索 GET api.example.com/user/{user_id} 阅读用户对象,并包括指向子对象列表的链接,即 api.example.com/user/{user_id}/channels api.example.com/user/{user_id}/members / channels调用将以以下形式返回频道资源列表: api.example.com/channel/{channel_id} 优点:主要资源公开了获取子目录的位置,而不是子目录(更RESTful?),不需要先要求下级,下级列表生成器(/ channels和/ members)提供了接口(类似方法)响应更多的服务喜欢。 缺点:现在需要三个调用才能完全填充对象 选项4-(重新)考虑REST的对象设计 …
72 api  class  rest  object  hierarchy 


5
如何使用带有Jersey的JAX-RS处理CORS
我正在开发一个Java脚本客户端应用程序,在服务器端我需要处理CORS,以及我用JERSEY用JAX-RS编写的所有服务。我的代码: @CrossOriginResourceSharing(allowAllOrigins = true) @GET @Path("/readOthersCalendar") @Produces("application/json") public Response readOthersCalendar(String dataJson) throws Exception { //my code. Edited by gimbal2 to fix formatting return Response.status(status).entity(jsonResponse).header("Access-Control-Allow-Origin", "*").build(); } 到目前为止,我收到错误消息请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源' http:// localhost:8080 '。” 请协助我。 谢谢与问候普涅斯
72 java  rest  jersey  jax-rs  cors 

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.