我假设响应代码200总是允许一个响应主体,但我找不到任何明确提到的DELETE请求的响应主体。
我参与了一个项目,一些高级团队成员认为REST API必须符合HATEOAS标准,并实施所有Richardson的成熟级别( http://martinfowler.com/articles/richardsonMaturityModel.html )! AFAIK大多数REST实现不符合HATEOAS标准,应该有更多人不这样做的充分理由。 我可以想到的原因,如增加复杂性,缺乏框架(服务器和客户端),性能问题和… 你怎么看? 你有没有与HATEOAS在现实世界项目中的经验?
我目前正在为现有的PHP应用程序deviseAPI,并为此调查REST作为一种明智的架构方法。 我相信我对关键概念有合理的把握,但是我正在努力find解决了对象层次结构和REST的人。 这是问题… 在[应用程序]业务对象层次结构中,我们有: Users L which have one-to-many Channel objects L which have one-to-many Member objects 在应用程序本身中,我们使用延迟加载方法根据需要使用这些对象的数组填充User对象。 我相信OO术语这是对象聚合,但我已经看到了各种命名不一致,不关心开始一场关于精确的命名约定的战争。 现在,考虑我有一些松散耦合的对象,根据应用程序的需要我可能/不可以填充。 从REST的angular度来看,我试图确定这个方法应该是什么。 这是我目前的想法(暂时只考虑GET): 选项1 – 完全填充对象: GET api.example.com/user/{user_id} 读取用户对象(资源)并返回用户对象,其中包含预先加载和编码的所有可能的通道和成员对象(JSON或XML)。 优点:减less对象数量,不需要遍历对象层次结构 缺点:对象必须完全填充(昂贵) 选项2 – 填充主要对象并包含指向其他对象资源的链接: GET api.example.com/user/{user_id} 阅读用户对象(资源)并返回填充的用户对象用户数据和两个列表。 每个列表引用适当的(子)资源,即 api.example.com/channel/{channel_id} api.example.com/member/{member_id} 我认为这与超媒体的影响(或确切地说)很接近 – 客户可以根据需要获得其他资源(只要我明智地标记)。 PROS:客户端可以select加载下属或者更好地分离对象作为REST资源 缺点:需要进一步旅行获得次要资源 选项3 – 启用recursion检索 GET api.example.com/user/{user_id} 阅读用户对象,并包含指向子对象列表的链接 api.example.com/user/{user_id}/channels api.example.com/user/{user_id}/members /通道调用将返回表单中的通道资源列表(如上所示): api.example.com/channel/{channel_id} PROS:主要的资源暴露了从哪里去获取子元素,而不是它们是什么(更RESTful?),没有要求获得下属,下级列表生成器(/通道和/成员)提供接口(方法)响应更多的服务。 […]
何时在REST API的请求部分中使用自定义HTTP头? 例: 你会用吗? GET /orders/view (custom HTTP header) CLIENT_ID: 23 代替 GET /orders/view/client_id/23 or GET /orders/view/?client_id=23
如http://www.boutell.com/newfaq/misc/urllength.html所述 ,HTTP查询string的长度有限。 它可以受到客户端(Firefox,IE,…),服务器(Apache,IIS,…)或networking设备(适用防火墙,…)的限制。 今天我用search表单来面对这个问题。 我们开发了一个带有很多字段的search表单,这个表单被作为一个GET请求发送到服务器,所以我可以为结果页面添加书签。 我们有这么多的字段,我们的查询string是1100字节长,我们有一个防火墙,丢弃超过1024字节的HTTP GET请求。 我们的系统pipe理员build议我们使用POST,所以没有限制。 当然,POST会工作,但我真的感到search作为GET而不是POST。 所以我想我会检查我们的字段名称,以确保查询string不是太长,如果我不能,我会务实和使用POST。 但是在RESTful服务的devise中是否存在缺陷? 如果我们在GET请求中的长度有限,我怎样才能发送大对象到REST风格的web服务? 例如,如果我有一个基于文件进行计算的程序,而且我想提供一个像这样的REST风格的web服务: http://compute.com?content=<base64 file> ://compute.com?content=< http://compute.com?content=<base64 file> 。 这不会工作,因为查询string没有无限长度。 我有点困惑…
对不起,这个问题听起来很愚蠢,但是在开发了一些使用Jersey的RESTful服务之后,我问自己这个问题 – 如果REST只是一个体系结构,而不是像SOAP这样的协议,为什么我们需要像JAX-RS这样的规范? 我实际上search了一些问题,例如“servlet和HTTP上的RESTful服务有什么区别”,并总结了社区的答案,我得到了: RESTful服务开发(在泽西岛上)是一种架构,它固有地使用servlet。 像Jersey这样的符合JAX-RS的工具提供了简单的编组 – parsingXML / JSON数据,帮助开发人员。 REST帮助我们使用GET / POST / PUT / DELETE,这种方式比普通的servlet有效得多。 根据这些答案,我猜如果我编写一个使用JAXB的servlet(用于处理自动序列化),并且在我的servlet代码中有效地使用GET / POST / PUT / DELETE,我不使用像Jersey这样的工具,因此JAX-RS。 我知道我通过这个声明是非常错误的,请纠正我。 PS:当我不得不在PHP中开发一些RESTful服务时,这个疑问实际上就出现了。 通过一些RESTful PHP代码后,我意识到它们只是旧的PHP脚本,有一些处理XML / JSON的辅助方法。
我需要接收一个只包含2个参数的HTTP Post Multipart: 一个JSONstring 二进制文件 哪个是设置正文的正确方法? 我要使用Chrome REST控制台testingHTTP调用,所以我想知道是否正确的解决scheme是为JSON参数和二进制文件设置“标签”键。 在服务器端,我使用了Resteasy 2.x,我将阅读这样的Multipart主体: @POST @Consumes("multipart/form-data") public String postWithPhoto(MultipartFormDataInput multiPart) { Map <String, List<InputPart>> params = multiPart.getFormDataMap(); String myJson = params.get("myJsonName").get(0).getBodyAsString(); InputPart imagePart = params.get("photo").get(0); //do whatever I need to do with my json and my photo } 这是要走的路吗? 检索我的JSONstring是否正确使用“myJsonName”键来标识特定的内容处置? 有没有其他方法可以在一个HTTP多方请求中接收这两个内容? 提前致谢
TL; DR:我是这个语言的新手,不知道自己在做什么 这是我的课到目前为止: using System; using System.Collections.Generic; using System.Net.Http; using System.Web; using System.Net; using System.IO; public class MyClass { private const string URL = "https://sub.domain.com/objects.json?api_key=123"; private const string data = @"{""object"":{""name"":""Title""}}"; public static void CreateObject() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = data.Length; StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); […]
我有一个ASP.Net单文件Web服务(一个包含IHttpHandler实现的.ashx文件),需要能够以500个内部服务器错误状态代码作为响应返回错误。 在PHP中这是一个相对简单的事情: header("HTTP/1.1 500 Internal Server Error"); header("Content-Type: text/plain"); echo "Unable to connect to database on $dbHost"; ASP.Net(C#)等价物应该是: Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; Context.Response.ContentType = "text/plain"; Context.Response.Write("Unable to connect to database on " + dbHost); 当然,这并不像预期的那样工作。 相反,IIS拦截了500个状态码,将我写到Response对象的任何东西都刷新,并根据应用程序的configuration发送debugging信息或自定义错误页面。 我的问题 – 我怎么能抑制这种IIS行为,并直接从我的IHttpHandler实施发送错误信息? 这个应用程序是从PHP端口; 客户端已经写了,所以我基本上坚持这个规范。 用200状态码发送错误很遗憾,不适合模具。 理想情况下,我需要以编程方式控制行为,因为这是我们想要分发的SDK的一部分,而不需要任何“ 编辑此文件 ”和“ 更改此IIS设置 ”的补充说明。 谢谢! 编辑 :sorting。 Context.Response.TrySkipIisCustomErrors = true是票据。 哇。
我的组织正在研究在JBoss应用服务器上构buildREST风格的Web服务。 QA团队习惯于使用SoapUItestingSOAP web服务。 SoapUI有一个具有RESTfunction的新版本。 我们正在考虑使用。 有没有在网上有免费公开的RESTful服务,有人可以testing? 哪些工具可用于(并用于)testingREST式Web服务?