Questions tagged «rest»

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


4
使用python向RESTful API发出请求
我有一个RESTful API,我已经在EC2实例上使用Elasticsearch的实现公开了索引内容的语料库。我可以通过从终端机(MacOSX)运行以下命令来查询搜索: curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{ "query": { "bool": { "must": [ { "text": { "record.document": "SOME_JOURNAL" } }, { "text": { "record.articleTitle": "farmers" } } ], "must_not": [], "should": [] } }, "from": 0, "size": 50, "sort": [], "facets": {} }' 如何使用python/requests或python/urllib2(不确定要使用哪一个-一直在使用urllib2,但听说请求更好……)将以上转换为API请求?我是否可以通过标题?

9
REST API 404:URI错误或资源丢失?
我正在构建REST API,但是遇到了问题。 在设计REST API时似乎可以接受的做法是,如果请求的资源不存在,则返回404。 但是,对我来说,这增加了不必要的歧义。传统上,HTTP 404与错误的URI相关联。因此,实际上,我们说的是“要么您到达了正确的位置,但是该特定记录不存在,或者互联网上没有这样的位置!我真的不确定哪一个...” 考虑以下URI: http://mywebsite/api/user/13 如果我收到404,那是因为用户13不存在吗?还是因为我的网址应该是: http://mywebsite/restapi/user/13 过去,HTTP 200 OK如果记录不存在,我刚刚返回了带有响应代码的NULL结果。它很简单,而且我认为它很干净,即使不一定接受这种做法。但是有更好的方法吗?
219 web-services  http  rest 

7
在HttpClient和WebClient之间决定
我们的Web应用程序在.Net Framework 4.0中运行。UI通过ajax调用来调用控制器方法。 我们需要使用供应商提供的REST服务。我正在评估在.Net 4.0中调用REST服务的最佳方法。REST服务需要基本身份验证方案,并且可以返回XML和JSON格式的数据。无需上传/下载大量数据,以后也看不到任何东西。我查看了一些用于REST的开源代码项目,但没有发现任何有价值的项目来证明该项目中的其他依赖性。开始评估WebClient和HttpClient。我从NuGet下载了.Net 4.0的HttpClient。 我搜索了WebClient和之间的差异HttpClient,该站点提到单个HttpClient可以处理并发调用,并且可以重用已解析的DNS,cookie配置和身份验证。我还没有看到由于差异而可能获得的实用价值。 我进行了快速性能测试,以了解WebClient(同步调用),HttpClient(同步和异步)的性能。结果如下: HttpClient对所有请求使用同一实例(最小-最大) WebClient同步:8毫秒-167毫秒 HttpClient同步:3毫秒-7228毫秒 HttpClient异步:985-10405毫秒 HttpClient为每个请求使用一个新的(最小-最大) WebClient同步:4毫秒-297毫秒 HttpClient同步:3毫秒 -7953毫秒HttpClient异步:1027-10834毫秒 码 public class AHNData { public int i; public string str; } public class Program { public static HttpClient httpClient = new HttpClient(); private static readonly string _url = "http://localhost:9000/api/values/"; public static void Main(string[] …

2
宁静的POST响应的“最佳实践”
因此,这里没有什么新内容,我只是想澄清一下,似乎在其他帖子中找不到任何内容。 我正在重新创建新资源,说: /books (POST) 与身体: { title: 'The Lion, the Witch and the Wardrobe', author: 'C. S. Lewis' } 我知道我应该返回带有新资源的Location标头的201(创建的): Location: /books/12345 我似乎无法为自己回答的问题是服务器应该返回什么内容。 我经常这样做: { id: 12345, title: 'The Lion, the Witch and the Wardrobe', author: 'C. S. Lewis' } 我这样做有两个原因: 我已经为诸如angularjs的前端框架编写了api。在我的特定情况下,我使用的是角度资源,并且我通常只需要ID即可找到资源。如果我没有在响应正文中返回ID,则需要从Location标头中解析出该ID。 在所有书籍的GET中,我通常返回整个对象而不仅仅是id。从这个意义上说,我的客户代码不必区分从何处获取ID(位置标头或主体)。 现在我知道我真的在这里处于灰色地带,但是大多数人都说退还全部资源是“不好的”做法。但是如果服务器将信息更改/添加到资源中该怎么办。它肯定会添加ID,但也可能添加其他内容,例如时间戳。如果我不返回整个资源,那么执行POST,返回ID,然后让客户端执行GET获取新资源真的更好吗?

11
JAX-RS / Jersey如何自定义错误处理?
我正在使用Jersey来学习JAX-RS(又名JSR-311)。我已经成功创建了一个根资源,并且正在使用参数: @Path("/hello") public class HelloWorldResource { @GET @Produces("text/html") public String get( @QueryParam("name") String name, @QueryParam("birthDate") Date birthDate) { // Return a greeting with the name and age } } 这很好用,并且可以处理Date(String)构造函数可以理解的当前语言环境中的任何格式(例如YYYY / mm / dd和mm / dd / YYYY)。但是,如果提供的值无效或无法理解,则会收到404响应。 例如: GET /hello?name=Mark&birthDate=X 404 Not Found 如何自定义此行为?也许是不同的响应代码(可能是“ 400 Bad Request”)?记录错误该怎么办?也许在自定义标题中添加问题描述(“错误日期格式”)以帮助进行故障排除?还是返回带有详细信息的完整错误响应以及5xx状态代码?

9
哪些HTTP方法与哪些CRUD方法匹配?
在RESTful样式编程中,我们应该使用HTTP方法作为构建基块。尽管有些方法与经典的CRUD方法匹配,但我有些困惑。GET / Read和DELETE / Delete很明显。 但是,PUT / POST有什么区别?它们是否与创建和更新一对一匹配?
213 http  rest  crud  http-method 

10
REST API是否有任何命名约定准则?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 2年前关闭。 改善这个问题 创建REST API时,API中是否有任何有关命名约定的准则或事实上的标准(例如:URL端点路径组件,querystring参数)?骆驼帽是规范,还是下划线?其他? 例如: api.service.com/helloWorld/userId/x 要么 api.service.com/hello_world/user_id/x 注意:这不是RESTful API设计的问题,而是用于最终使用的路径组件和/或查询字符串参数的命名约定准则。 任何准则,将不胜感激。

11
RESTful服务中部分更新的最佳实践
我正在为客户管理系统编写RESTful服务,并且试图找到最佳方式来部分更新记录。例如,我希望调用者能够通过GET请求读取完整记录。但是为了进行更新,仅允许记录上的某些操作,例如将状态从“启用”更改为“禁用”。(我有比这更复杂的场景) 出于安全原因,我不希望呼叫者仅使用更新的字段来提交整个记录(这也感觉像是过大了)。 有没有推荐的方法来构造URI?在阅读REST书籍时,似乎不喜欢RPC样式调用。 如果以下呼叫返回ID为123的客户的完整客户记录 GET /customer/123 <customer> {lots of attributes} <status>ENABLED</status> {even more attributes} </customer> 我应该如何更新状态? POST /customer/123/status <status>DISABLED</status> POST /customer/123/changeStatus DISABLED ... 更新:扩大问题。如何将“业务逻辑调用”整合到REST API中?有达成共识的方式吗?本质上,并非所有方法都是CRUD。有些更为复杂,例如“ sendEmailToCustomer(123) ”,“ mergeCustomers(123,456) ”,“ countCustomers() ” POST /customer/123?cmd=sendEmail POST /cmd/sendEmail?customerId=123 GET /customer/count
208 rest 

6
如何使用node.js实现安全的REST API
我开始使用node.js,express和mongodb计划REST API。该API为网站(公共和私有区域)提供数据,之后可能还会提供移动应用程序的数据。前端将使用AngularJS开发。 几天来,我读了很多有关保护REST API的知识,但是我没有一个最终的解决方案。据我了解是使用HTTPS提供基本的安全性。但是在那种情况下我如何保护API: 仅网站/应用程序的访问者/用户被允许获取网站/应用程序公共区域的数据 仅允许经过身份验证和授权的用户获取专用区域的数据(并且仅允许用户授予权限的数据) 目前,我考虑只允许具有活动会话的用户使用API​​。要授权用户,我将使用护照,并且需要获得许可,我需要自己实现一些功能。全部位于HTTPS的顶部。 有人可以提供一些最佳实践或经验吗?我的“体系结构”是否缺乏?


8
OData和REST Web服务之间的区别
在研究某些Web服务时,我遇到了Microsoft称之为OData的 “新”技术。通过阅读FAQ中有关OData是什么的通篇,我很难区分OData和REST-ful Web服务。有人可以帮我理解差异吗?
196 web-services  rest  odata 

4
Rails新建与创建
为什么需要在RESTful控制器中定义一个新方法,然后再创建一个方法呢? Google搜索未提供我所需要的答案。我了解其中的区别,但是需要知道为什么要按原样使用它们。

10
跨REST微服务的交易?
假设我们有一个User,Wallet REST微服务和一个将事物粘合在一起的API网关。当Bob在我们的网站上注册时,我们的API网关需要通过User微服务创建用户,并通过Wallet微服务创建钱包。 现在,这是一些可能出错的场景: 用户Bob的创建失败:可以,我们只向Bob返回一条错误消息。我们正在使用SQL事务,因此没人能在系统中看到Bob。一切都很好:) 用户Bob已创建,但是在创建我们的电子钱包之前,我们的API网关会严重崩溃。现在,我们有一个没有钱包的用户(数据不一致)。 用户Bob已创建,并且在我们创建电子钱包时,HTTP连接断开。钱包创建可能成功,也可能没有成功。 有哪些解决方案可以防止这种数据不一致的情况发生?是否存在允许事务跨越多个REST请求的模式?我已经阅读了有关两阶段提交的Wikipedia页面,该页面似乎涉及到此问题,但是我不确定如何在实践中应用它。这种原子分布式事务:一个RESTful设计纸似乎也有意思,虽然我还没有看过它。 另外,我知道REST可能不适合此用例。处理这种情况的正确方法也许会完全丢弃REST,并使用其他通信协议(例如消息队列系统)来进行处理吗?还是我应该在应用程序代码中强制执行一致性(例如,通过具有检测不一致之处并进行修复的后台作业,或者通过在用户模型上使用“创建”,“创建”的值等方式具有“状态”属性)?

5
如何在Spring RestTemplate请求上设置“ Accept:”标头?
我想Accept:在使用Spring的请求中设置的值RestTemplate。 这是我的Spring请求处理代码 @RequestMapping( value= "/uom_matrix_save_or_edit", method = RequestMethod.POST, produces="application/json" ) public @ResponseBody ModelMap uomMatrixSaveOrEdit( ModelMap model, @RequestParam("parentId") String parentId ){ model.addAttribute("attributeValues",parentId); return model; } 这是我的Java REST客户端: public void post(){ MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); params.add("parentId", "parentId"); String result = rest.postForObject( url, params, String.class) ; System.out.println(result); } 这对我有用;我从服务器端获取了JSON字符串。 我的问题是:我怎么可以指定Accept:报头(例如application/json,application/xml,...),并请求方法(例如GET,POST,...)当我使用RestTemplate?

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.