Questions tagged «rest»

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

4
REST API-文件(即图像)处理-最佳做法
我们正在使用REST API开发服务器,该API接受和响应JSON。问题是,如果您需要将图像从客户端上传到服务器。 注意:我也正在谈论一个用例,其中实体(用户)可以具有多个文件(carPhoto,licensePhoto)并且还具有其他属性(名称,电子邮件...),但是当您创建新用户时,您不会这些图片不会发送,而是在注册过程后添加的。 我知道的解决方案,但每个解决方案都有一些缺陷 1.使用multipart / form-data代替JSON 很好:POST和PUT请求尽可能地是RESTful的,它们可以包含文本输入和文件。 缺点:它不再是JSON,与multipart / form-data相比,它更易于测试,调试等。 2.允许更新单独的文件 创建新用户的POST请求不允许添加图片(在我们的用例中,我一开始就这么说过),上传图片是通过PUT请求作为multipart / form-data完成的,例如,/ users / 4 / carPhoto 很好:所有内容(文件上传本身除外)都保留在JSON中,易于测试和调试(您可以记录完整的JSON请求而不必担心它们的长度) 缺点:这不直观,您不能一次过POST或PUT实体的所有变量,并且也可以将此地址/users/4/carPhoto更多地视为一个集合(REST API的标准用例如下/users/4/shipments)。通常,您不能(也不想)获取/放置实体的每个变量,例如users / 4 / name。您可以使用GET获取名称,并使用users / 4在PUT上更改名称。如果id后面有东西,通常是另一个集合,例如users / 4 / reviews 3.使用Base64 将其作为JSON发送,但使用Base64编码文件。 良好:与第一个解决方案相同,它是尽可能多的RESTful服务。 缺点:再次,测试和调试要差很多(主体可能具有兆字节的数据),客户端和服务器的大小和处理时间都增加了 我真的很想使用解决方案编号。2,但是它有其缺点...任何人都可以给我更好的洞察力,即“什么是最好的”解决方案? 我的目标是使RESTful服务包含尽可能多的标准,而我想使其尽可能简单。

5
为移动应用程序创建API-身份验证和授权
总览 我正在为我的应用程序创建一个(REST)API。最初/主要目的是供移动应用程序(iPhone,Android,Symbian等)使用。我一直在研究基于Web的API的身份验证和授权的不同机制(通过研究其他实现)。我已经把大部分基本概念都束之高阁,但仍在一些方面寻求指导。我想做的最后一件事是重新发明轮子,但是我没有找到任何适合我标准的标准解决方案(但是我的标准可能会被误导,因此也随时可以批评我)。另外,我希望所有使用它的平台/应用程序的API都相同。 oAuth 我会继续反对oAuth,因为我知道这可能是第一个提供的解决方案。对于移动应用程序(或更确切地说是非Web应用程序),离开应用程序(转到Web浏览器)进行身份验证似乎是错误的。另外,浏览器无法(我知道)将回调返回给应用程序(尤其是跨平台)。我知道有几个应用程序可以做到这一点,但是感觉不对,并中断了应用程序UX。 要求 用户在应用程序中输入用户名/密码。 每个API调用均由调用应用程序标识。 开销降至最低,并且对于开发人员而言,auth方面很直观。 该机制对于最终用户(不公开其登录凭据)和开发人员(不公开其应用程序凭据)都是安全的。 如果可能,则不需要https(绝不是硬要求)。 我当前的实施思想 外部开发人员将请求一个API帐户。他们将获得一个apikey和apisecret。每个请求至少需要三个参数。 apikey-在注册时提供给开发人员 时间戳-兼用作给定apikey的每个消息的唯一标识符 hash-时间戳+ apisecret的哈希 需要apikey来标识发出请求的应用程序。时间戳记的行为与oauth_nonce类似,并且避免/减轻了重播攻击。哈希确保请求实际上是从给定apikey的所有者发出的。 对于经过身份验证的请求(代表用户的请求),我仍然不确定要使用access_token路由还是使用用户名和密码哈希组合。无论哪种方式,在某个时候都将需要用户名/密码组合。因此,当这样做时,将使用多个信息(apikey,apisecret,时间戳)和密码的哈希。 我希望在这方面提供反馈。 仅供参考,他们必须先对密码进行哈希处理,因为我不会在不进行哈希处理的情况下将密码存储在系统中。 结论 仅供参考,这并不是要求通常如何构建/结构化API,而仅仅是要求如何仅从应用程序内部处理身份验证和授权。 随机想法/奖金问题 对于仅要求将apikey作为请求的一部分的API,如何防止apikey所有者以外的其他人看到apikey(因为是明文发送的),并提出过多的请求以使它们超过使用限制?也许我只是在考虑这个问题,但是不应该有什么东西可以验证对apikey所有者进行了验证的请求吗?在我的情况下,这是apisecret的目的,它不会被散列而不会显示/传输。 说到哈希,md5 vs hmac-sha1呢?当所有值都用足够长的数据(即apisecret)进行哈希处理时,真的重要吗? 我以前一直在考虑向用户密码哈希添加每用户/行盐。如果要这样做,应用程序如何能够在不知道使用盐的情况下创建匹配的哈希?

14
如何在Node.js中进行远程REST调用?任何CURL?
在Node.js中,除了使用子进程进行CURL调用之外,还有一种方法可以对远程服务器进行CURL调用。 REST API并获取返回数据? 我还需要将请求标头设置到远程REST调用,还需要在GET(或POST)中查询字符串。 我找到这个: http //blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs 但它没有显示任何方法来发布查询字符串。
189 rest  curl  node.js 

26
如何在ASP.net Core WebAPI中启用CORS
我想做什么 我有一个托管在Azure免费计划上的后端ASP.Net Core Web API(源代码:https : //github.com/killerrin/Portfolio-Backend)。 我也有一个客户网站,我想使用该API。客户端应用程序不会托管在Azure上,而是托管在Github Pages或我有权访问的另一个Web托管服务上。因此,域名将无法排列。 考虑到这一点,我需要在Web API端启用CORS,但是我已经尝试了几乎所有内容几个小时,并且它拒绝工作。 我如何进行客户端设置 它只是一个用React.js编写的简单客户端。我正在通过Jquery中的AJAX调用API。React网站可以正常工作,所以我不知道。正如我在尝试1中确认的那样,对Jquery API的调用有效。这是我进行调用的方式 var apiUrl = "http://andrewgodfroyportfolioapi.azurewebsites.net/api/Authentication"; //alert(username + "|" + password + "|" + apiUrl); $.ajax({ url: apiUrl, type: "POST", data: { username: username, password: password }, contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { var authenticatedUser …

16
file_get_contents():SSL操作失败,代码为1,无法启用加密
我一直试图从我在服务器上创建的PHP页面访问此特定的REST服务。我将问题缩小到这两行。所以我的PHP页面看起来像这样: <?php $response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json"); echo $response; ?> 该页面死于第2行,并出现以下错误: 警告:file_get_contents():SSL操作失败,代码为1。OpenSSL错误消息:error:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在第2行的... php中失败 警告:file_get_contents():无法在第2行的... php中启用加密 警告:file_get_contents(https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json):无法打开流:第2行... php中的操作失败 我们正在使用Gentoo服务器。我们最近升级到PHP版本5.6。升级之后,才出现此问题。 我发现我将REST服务替换为https://www.google.com;我的页面工作正常。 在较早的尝试中,我设置了“verify_peer”=>false,并将其作为参数传递给file_get_contents,如下所述: file_get_contents忽略verify_peer => false? 但是就像作者指出的那样;没关系。 我已经问过我们的服务器管理员之一,我们的php.ini文件中的这些行是否存在: 扩展名= php_openssl.dll allow_url_fopen =开 他告诉我,由于我们使用的是Gentoo,因此在构建时便会编译openssl;并且未在php.ini文件中设置。 我还确认这allow_url_fopen是可行的。由于此问题的特殊性质;我找不到很多帮助的信息。你们有没有遇到过这样的事情?谢谢。

8
使用Spring可以使路径变量可选吗?
在Spring 3.0中,我可以有一个可选的path变量吗? 例如 @RequestMapping(value = "/json/{type}", method = RequestMethod.GET) public @ResponseBody TestBean testAjax( HttpServletRequest req, @PathVariable String type, @RequestParam("track") String track) { return new TestBean(); } 在这里我想/json/abc或/json调用相同的方法。 一种明显的解决方法是声明type为请求参数: @RequestMapping(value = "/json", method = RequestMethod.GET) public @ResponseBody TestBean testAjax( HttpServletRequest req, @RequestParam(value = "type", required = false) String type, @RequestParam("track") String …
186 spring  rest 

10
在由nodejs制作的REST API中设置响应状态和JSON内容并表达的正确方法
我正在玩Nodejs,并通过构建一个小的rest API来表达。我的问题是,设置代码状态以及响应数据的最佳实践/最佳方法是什么? 让我用一些代码来解释(我不会放置节点并表达启动服务器所需的代码,而只是涉及的路由器方法): router.get('/users/:id', function(req, res, next) { var user = users.getUserById(req.params.id); res.json(user); }); exports.getUserById = function(id) { for (var i = 0; i < users.length; i++) { if (users[i].id == id) return users[i]; } }; 下面的代码运行完美,当与Postman发送请求时,我得到以下结果: 如您所见,状态显示为200,这是确定的。但这是最好的方法吗?是否需要我自己设置状态以及返回的JSON?还是总是由快递处理? 例如,我只是做了一个快速测试,并略微修改了上面的get方法: router.get('/users/:id', function(req, res, next) { var user = users.getUserById(req.params.id); if (user …
186 node.js  rest  http  express 

9
HTTP中的“ 406-不可接受的响应”是什么?
在我的Ruby on Rails应用程序中,我尝试通过POSTMAN REST客户端以Base64格式上传图像。发布图片时,我收到406不可接受的响应。当我检查数据库时,该图像在那里并且已成功保存。 此错误的原因是什么,我需要在标题中指定任何内容吗? 我的请求: 网址- http://localhost:3000/exercises.json 标头: Content-Type - application/json 原始数据: { "exercise": { "subbodypart_ids": [ "1", "2" ], "name": "Exercise14" }, "image_file_name": "Pressurebar Above.jpg", "image":"******base64 Format*******" }

11
安全的Web服务:HTTPS上的REST与SOAP + WS-Security。哪个更好?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 改善这个问题 无论如何我都不是安全专家,但是我更喜欢创建REST风格的Web服务。 在创建需要具有数据传输功能的新服务时。关于哪种方法更安全,我们进行了辩论-使用HTTPS的REST或使用WS-Security的SOAP WS。 我的印象是我们可以对所有Web服务调用使用HTTPS,这种方法将是安全的。我的看法是,“如果HTTPS对银行和金融网站足够好,那么对我来说也足够好”。再说一次,我不是这个领域的专家,但是我认为这些人对这个问题相当认真地考虑过并且对HTTPS感到满意。 一位同事不同意,并说SOAP和WS-Security是唯一的方法。 网络似乎遍地都是。 也许这里的社区可以权衡每个人的利弊?谢谢!

5
REST API身份验证
我正在构建一个将托管在服务器上的应用程序。我想为该应用程序构建一个API,以促进与任何平台(Web App,Mobile App)的交互。我不了解的是,在使用REST API时,我们如何验证用户身份。 例如,当用户登录后想要创建论坛主题时。我怎么知道该用户已经登录?
181 api  rest 

3
REST API登录模式
我正在创建一个REST api,紧紧遵循apigee建议,使用名词而不是动词,url中烘焙的api版本,每个集合两个api路径,GET POST PUT DELETE用法等。 我正在使用登录系统,但是不确定用于登录用户的正确REST方式。我目前不在安全性方面,只是在登录模式或流程方面。(稍后,我们将添加2步oAuth,以及HMAC等) 可能的选择 张贴到类似的东西 https://api...com/v1/login.json 放置到类似 https://api...com/v1/users.json 我还没有... 用于登录用户的正确REST风格是什么?

3
URL矩阵参数与查询参数
我想知道是在URL中使用矩阵还是查询参数。我发现对该主题的较早讨论并不令人满意。 例子 带有查询参数的URL:http://some.where/thing?paramA = 1&paramB = 6542 带有矩阵参数的URL:http://some.where/thing; paramA = 1; paramB = 6542 乍看之下,矩阵参数似乎只有优点: 更具可读性 不需要对XML文档中的“&”进行编码和解码 带有“?”的网址 在许多情况下不会被缓存;具有矩阵参数的URL被缓存 矩阵参数可以出现在路径的任何地方,并且不限于其结尾 矩阵参数可以具有多个值: paramA=val1,val2 但是也有缺点: 只有少数框架(如JAX-RS)支持矩阵参数 当浏览器通过GET提交表单时,这些参数成为查询参数。因此,对于同一任务,它以两种参数结束。为了不混淆REST服务的用户并限制服务开发人员的工作量,在此区域中使用始终查询参数会更容易。 由于服务的开发人员可以选择支持矩阵参数的框架,因此唯一的缺点是浏览器默认会创建查询参数。 还有其他缺点吗?你会怎么做?
178 http  url  rest  parameters  jax-rs 

1
REST复杂/复合/嵌套资源[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在努力解决在基于REST的API中解决概念的最佳方法。不包含其他资源的固定资源没有问题。我遇到麻烦的地方是复杂的资源。 例如,我有一部漫画资源。ComicBook拥有所有喜欢各种各样它的属性author,issue number,date,等。 一本漫画书也有1..n封面清单。这些封面是复杂的对象。它们包含有关封面的许多信息:艺术家,日期,甚至是封面的base 64编码图像。 对于GET上,ComicBook我可以退回漫画,以及所有的封面,包括其base64版本的图像。获得一部漫画可能不是什么大事。但是,假设我正在构建一个客户端应用程序,该应用程序希望在表格中列出系统中的所有漫画。 该表将包含ComicBook资源中的一些属性,但是我们当然不想显示该表中的所有封面。归还1000本漫画书,每本漫画书都有多个封面,这将导致大量数据荒谬地通过网络传播,在这种情况下,最终用户不需要这些数据。 我的本能是制造Cover资源并ComicBook包含掩护。所以现在Cover是一个URI。GET现在在漫画书上工作时,Cover我们会为每个封面发送一个URI ,而不是大量的资源,客户可以根据需要检索Cover资源。 现在,我在创建新漫画时遇到了问题。当然Comic,在创建时,我肯定会想要创建至少一个封面,实际上这可能是一条业务规则。 所以现在我卡住了,我要么强制客户端通过先提交给执行业务规则Cover,获得URI为盖,然后POST荷兰国际集团一个ComicBook与URI列表,或者我POST对ComicBook发生在不同的资源寻找比它吐出出来。对于收到的资源POST和GET深拷贝,其中传出GET小号包含对相关资源的引用。 该Cover资源在任何情况下都可能是必需的,因为在某些情况下,我确定作为客户端我想解决的问题涵盖了方向。因此,无论依赖资源的大小如何,问题都以一般形式存在。通常,您如何处理复杂的资源而又不强迫客户端仅“知道”这些资源的组成方式?


10
Spring Boot REST服务异常处理
我正在尝试建立一个大型的REST服务服务器。我们正在使用Spring Boot 1.2.1,Spring 4.1.5和Java8。我们的控制器正在实现@RestController和标准的@RequestMapping注释。 我的问题是Spring Boot为控制器异常设置了默认重定向到/error。从文档: Spring Boot默认提供一个/ error映射,以一种明智的方式处理所有错误,并且在servlet容器中被注册为“全局”错误页面。 对使用Node.js编写REST应用程序已有多年的经验,对我而言,这绝非明智之举。服务端点生成的任何异常都应在响应中返回。我不明白为什么您要发送重定向到最有可能是Angular或JQuery SPA使用者的重定向程序,该使用者仅在寻找答案并且不能或不会对重定向采取任何措施。 我想做的是设置一个可以接受任何异常的全局错误处理程序-有目的地从请求映射方法抛出,或者由Spring自动生成(如果未为请求路径签名找到处理程序方法,则为404),然后返回标准格式的错误响应(400、500、503、404)到客户端,而无需任何MVC重定向。具体来说,我们将处理错误,使用UUID将其记录到NoSQL,然后将正确的HTTP错误代码与JSON主体中的日志条目的UUID返回给客户端。 文档对如何执行此操作一直含糊不清。在我看来,您必须创建自己的ErrorController实现或以某种方式使用ControllerAdvice,但是我所看到的所有示例仍然包括将响应转发到某种错误映射,这没有帮助。其他示例建议您必须列出要处理的每个Exception类型,而不是仅列出“ Throwable”并获取所有内容。 谁能告诉我我错过了什么,或者在没有暗示Node.js更容易处理的前提下为我指出正确的方向?

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.