Questions tagged «rest»

代表性状态传输(REST)是一种体系结构样式,用于网络软件通过Web传输信息。

6
REST和CRUD之间的区别
我学习了REST,感觉很像CRUD(根据我对CRUD的了解)。 我知道它们是不同的,并且我想知道是否认为它们相似意味着我不理解它们。 REST是CRUD的“超集”吗?CRUD所做的一切以及更多吗?
168 rest  crud 

7
搜索如何适合RESTful接口?
在设计RESTful接口时,请求类型的语义被认为对设计至关重要。 GET-列表收集或检索元素 PUT-替换集合或元素 POST-创建集合或元素 DELETE-好吧,erm,删除集合或元素 但是,这似乎没有涵盖“搜索”的概念。 例如,在设计一套支持求职网站的Web服务时,您可能具有以下要求: 获取个人招聘广告 GET来domain/Job/{id}/ 创建招聘广告 发布到domain/Job/ 更新职位广告 PUT到domain/Job/ 删除招聘广告 删除到domain/Job/ “获得所有工作”也很简单: GET来domain/Jobs/ 但是,工作“搜索”如何落入这种结构? 您可以声称这是“列表集合”的变体,并实现为: GET来domain/Jobs/ 但是,搜索可能很复杂,完全有可能产生一个生成长GET字符串的搜索。也就是说,在这里引用SO问题,使用GET字符串的长度超过2000个字符存在一些问题。 一个示例可能是多面搜索-继续“工作”示例。 我可能会在以下方面进行搜索-“技术”,“职位名称”,“学科”以及自由文本关键字,工作年龄,位置和薪水。 凭借流畅的用户界面和大量技术和职务,搜索可以包含大量方面的选择是可行的。 通过将此示例调整为简历而不是职位,可以带来更多的方面,您可以很容易地想象出搜索时选择了100个方面,甚至只是40个方面(每个方面50个字符)(例如,职务,大学名称,雇主名称)。 在那种情况下,可能需要移动PUT或POST,以确保将正确发送搜索数据。例如: 发布到domain/Jobs/ 但是从语义上讲,这是创建集合的指令。 您也可以说这将表示为搜索的创建: 发布到domain/Jobs/Search/ 或(如下面的燃烧语法所建议) 发布到domain/JobSearch/ 从语义上看,这似乎很有意义,但是您实际上并没有创建任何东西,而是在请求数据。 因此,从语义上讲,这是一个GET,但不能保证GET支持您所需要的。 因此,问题是-尝试尽可能地遵循RESTful设计,同时确保我保持在HTTP的限制之内,最适合搜索的设计是什么?

3
REST API安全性存储令牌vs JWT vs OAuth
我仍在尝试寻找最佳的安全解决方案来保护REST API,因为移动应用程序和API的数量每天都在增加。 我尝试了不同的身份验证方式,但是仍然存在一些误解,因此我需要经验丰富的人的建议。 让我说说,我如何理解所有这些东西。如果我理解不正确,请告诉我。 就REST API和WEB而言,它都是无状态的,我们需要在每个请求中发送一些auth数据(cookie,令牌...)。我知道三种用于验证用户身份的广泛使用的机制 使用HTTPS的令牌。我已经使用这种方法很多次,对于HTTPS来说已经足够了。如果用户提供正确的密码和登录名,他将收到令牌作为响应,并将其用于其他请求。令牌由服务器生成并存储,例如存储在单独的表中或存储用户信息的表中。因此,对于每个请求服务器,检查用户是否具有令牌,并且该令牌与数据库中的令牌相同。一切都非常简单。 JWT令牌。该令牌是自描述的,它包含有关令牌本身的所有必要信息,用户无法更改(例如到期日期)或任何其他声明,因为该令牌是由服务器使用secret关键字生成(签名)的。这也很清楚。但是对我个人来说,一个大问题是如何使令牌无效。 OAuth2。我不明白为什么直接在服务器和客户端之间建立通信时应使用这种方法。据我了解,OAuth服务器用于发布具有受限范围的令牌,以允许其他应用程序访问用户信息而无需存储密码和登录名。对于社交网络而言,这是一个很好的解决方案,当用户想要在某个页面上进行注册时,服务器可以请求权限以获取用户信息(例如,从Twitter或Facebook获取信息),并使用用户数据等填充注册字段。 考虑将移动客户端用于在线商店。 第一个问题,我应该比第一类令牌更喜欢JWT吗?就我需要在移动客户端上登录/注销用户而言,我需要将令牌存储在某个地方,或者在JWT的情况下,令牌应该在注销时失效。使用不同的方法来使令牌无效,其中之一是创建无效的令牌列表(黑名单)。嗯 表/文件的大小比令牌存储在表中并与用户相关联并且在注销时被删除时要大得多。 那么,JWT令牌的好处是什么? 关于OAuth的第二个问题,如果与服务器直接通信,应该使用它吗?客户端和服务器之间仅发出令牌的另一层的目的是什么,但是通信将不是与oauth服务器,而是与主服务器。据我了解,OAuth服务器仅负责授予第三方应用访问用户私人信息的权限(令牌)。但是我的移动客户端应用程序不是第三方。
104 security  rest  api  oauth  https 

8
如何仅为受信任的移动应用程序维护REST API
如何确保我的REST API仅响应受信任客户端(对于我自己的移动应用程序)生成的请求?我想防止来自其他来源的不必要的请求。我不希望用户填写序列号或其他任何东西,它应该在安装后在后台进行,并且不需要任何用户交互。 据我所知,HTTPS仅用于验证与之通信的服务器的身份。我当然要使用HTTPS加密数据。 有没有办法做到这一点? 更新: 用户可以执行只读操作,这些操作不需要用户登录,但可以执行写操作,这些操作也需要用户登录(通过访问令牌进行身份验证)。在这两种情况下,我都希望API响应仅来自受信任的移动应用程序的请求。 该API也将用于通过移动应用程序注册新帐户。 更新2:似乎有多个答案,但是老实说,我不知道将哪个标记为答案。有人说可以做到,有人说不能做到。
96 security  rest  mobile 

3
REST是什么(用简单的英语)[关闭]
最近,我对熟悉REST感兴趣。我尝试在REST上阅读Wiki条目,但这没有帮助。如果有人可以用简单的英语讲解(这没有不必要的技术术语),我将不胜感激 什么是REST 它在Web架构生态系统中占据什么位置 它与协议耦合的紧密程度(或宽松程度)。 REST的替代方案是什么?REST与它们相比如何? 我了解可能无法在一两个段落中回答这个问题,在这种情况下,相关链接将受到高度赞赏。
84 rest 

7
我应该使用哪个HTTP动词来触发REST Web服务中的操作?
我正在实现RESTful Web服务,可用的操作之一将是reload。它将用于重新加载配置,缓存等。 我们从一个简单GET的URI 开始,如下所示:(${path}/cache/reload不传递任何参数,仅调用URI)。我知道不应使用GET请求修改数据。 在RESTful Web服务中用来调用动作/命令的正确动词是什么? 重新加载是REST Web服务的命令,该命令重新加载自己的缓存/配置/等。它不是将信息返回给客户端的方法。 我想做的可能不是REST,但这仍然需要通过这种方式来完成。该reload方法只是一个真实的示例,在应用程序范围内有意义,并且大多数答案都针对该示例,但是实际上,我只需要知道哪个动词即可触发不执行CRUD的操作,但仍会更改数据/州。 我在以下主题的Stack Overflow上找到了这个详细的答案:https ://stackoverflow.com/questions/16877968/
80 rest  rpc 


7
通过URI与查询字符串设计REST API
假设我有三个相关的资源,如下所示: Grandparent (collection) -> Parent (collection) -> and Child (collection) 上面这样描述了这些资源之间的关系:每个祖父母可以映射到一个或几个父母。每个父母可以映射到一个或几个孩子。我希望能够支持针对子资源的搜索,但具有过滤条件: 如果我的客户给我传递了一个祖父母的ID参考,那么我只想搜索是该祖父母的直接后代的孩子。 如果我的客户向我传递了对父母的ID引用,我只想搜索父母直接后代的孩子。 我想到过这样的事情: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} 和 GET /myservice/api/v1/parents/{parentID}/children?search={text} 分别满足上述要求。 但是我也可以这样做: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} 在这种设计中,我可以允许我的客户端向我传递查询字符串中的一个或另一个:grandparentID或parentID,但不能两者都传递。 我的问题是: 1)哪种API设计更RESTful,为什么?在语义上,它们的含义和行为方式相同。URI中的最后一个资源是“子代”,有效地暗示客户端正在子代资源上运行。 2)从客户的角度看可理解性以及从设计者的角度看可维护性方面,每种方法的优缺点是什么。 3)除了对资源进行“过滤”外,查询字符串的真正用途是什么?如果采用第一种方法,则将filter参数作为路径参数而不是查询字符串参数嵌入到URI本身中。 谢谢!
73 design  rest  api 

4
不使用JSF的原因[关闭]
我是StackExchange的新手,但我认为您可以为我提供帮助。 我们正在创建一个新的Java Enterprise应用程序,以替换旧版JSP解决方案。由于许多更改,UI和业务逻辑的各个部分将被完全重新考虑和重新实现。 我们首先想到的是JSF,因为它是Java EE中的标准。起初,我印象深刻。但是现在,我正在尝试实现一个功能原型,并且对使用它确实有一些严重的担忧。 首先,它创建了我见过的最糟糕,最混乱的无效伪HTML / CSS / JS混合。它违反了我在网络开发中学到的每一个规则。此外,它把所有东西紧密结合在一起:布局,设计,逻辑和与服务器的通信。我看不到如何舒适地扩展此输出,无论是使用CSS样式,添加UI糖果(例如可配置的热键,拖放小部件)还是其他方法。 其次,它太复杂了。它的复杂性非常出色。如果您问我,这是对基本Web技术的拙劣抽象,最终变得残废无用。我有什么好处?没有,如果您考虑的话。数百个组件?我看到了数以万计的HTML / CSS片段,数万个JavaScript片段以及成千上万个jQuery插件。它解决了很多问题-如果不使用JSF,就不会有。或完全是前控制器模式。 最后,我认为我们将不得不在两年之内重新开始。我看不到如何实现所有第一个GUI模型(此外;我们的团队中没有JSF专家)。也许我们可以以某种方式将其破解。然后会有更多。我确信我们可以破解我们的黑客。但是在某些时候,我们会陷入困境。由于服务层之上的所有内容都由JSF控制。我们将不得不重新开始。 我的建议是使用JAX-RS实现REST api。然后用客户端MVC创建一个HTML5 / Javascript客户端。(或MVC的某种风格。)顺便说一句;无论如何,我们都将需要REST api,因为我们也在开发部分Android前端。 我怀疑JSF是当今最好的解决方案。随着互联网的发展,我真的不明白为什么要使用这种“耙子”。 现在,优点/缺点是什么?我如何强调我不使用JSF的观点?在我的建议下使用JSF有什么优点?

5
除了能够或多或少地自由更改URL结构的能力之外,HATEOAS还提供了哪些可发现性和去耦性?
最近,我一直在阅读有关作为应用程序状态引擎(HATEOAS)的Hypermedia的信息,据称该约束使Web API成为“真正的RESTful”。它归结为基本上包括链接,这些链接包含对从当前状态可能进行的转换的每个响应。 让我根据自己的理解来说明HATEOAS是什么-如果错过任何事情,请纠正我。 / GET: { "_links": { "child": [ { "href": "http://myapi.com/articles", "title": "articles" } ] } } /articles?contains=HATEOAS GET: { "_items": [ { "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" }, { "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" } ], "_links": { "self": { "href": …
61 rest  http  hateoas 

3
RESTful API中的斜杠
我一直在争论如何使用RESTful API中的斜杠。 可以说我有一个称为狗的资源,而每个狗都有从属资源。因此,我们可以执行以下操作: GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} 但是,如何处理以下特殊情况: GET/PUT/POST/DELETE http://example.com/dogs/ 我个人的观点是,这是向id = =的单个狗资源发送请求null。我认为在这种情况下,API应该返回404。 其他人则说请求正在访问dogs资源,即尾部的斜杠将被忽略。 有人知道最终答案吗?
60 api  rest  http 

7
RESTFul:状态更改操作
我正计划构建RESTfull API,但是有些架构问题正在脑海中产生一些问题。我想避免向客户端添加后端业务逻辑,因为当业务逻辑可以快速更改时,很难实时维护多个客户端平台的更新。 假设我们将文章作为资源(api / article),我们应该如何实现诸如发布,取消发布,激活或停用之类的操作,但又要尽量使其简单? 1)我们是否应该使用api / article / {id} / {action},因为在那里可能会发生很多后端逻辑,例如推送到远程位置或更改多个属性。可能最难的是,我们需要将所有文章数据发送回API进行更新,并且无法实现多用户工作。例如,编辑器可以发送5秒钟的旧数据,并覆盖其他记者2秒钟前所做的修复,而我无法向客户解释这一点,因为发布文章的人实际上与更新内容没有任何关系。 2)创建新资源也可以是api / article- {action} / id选项,但返回的资源将不是article- {action},但我不确定这是否合适。同样在服务器端代码文章类中,正在处理两种资源上的实际工作,并且我不确定这是否与RESTfull思想背道而驰。 任何建议都欢迎。
59 api  rest 

6
“无结果”是否应该是RESTful响应中的错误?
我将描述一个示例: 我开始为烘焙店制作API。该API将使人们可以在目录中搜索烘焙产品,例如使用制作的薄荷巧克力曲奇api.examplebakery.com/search?q=.....。 有人使用它来查找名为的产品pineapple-banana flavoured cookies,显然不会找到任何结果。 是否应该将其作为错误返回?搜索没有失败,API进行了搜索并成功得出结论,找不到cookie。该API不应返回404,因为确实找到了该API。

3
SOAP的当前意义是什么
上一次我在2013年在一家金融公司实习期间遇到了一个基于SOAP的服务。那是我开始从事IT事业的时候。我记得在我的一个工程课程中有一些关于SOAP的学习资料。除此之外,我在职业生涯中没有使用过太多SOAP。 我问这个问题是因为“ SOAP和REST之间的差异”这个问题是我最近的一次采访中出现的。据我所知(以及我在Google上所发现的),SOAP是一种在客户端和服务器之间具有紧密耦合的协议,用于信息交换,该协议与业务逻辑密切相关。REST是用于数据传输的更灵活的无状态架构。 如果我对SOAP和REST之间的区别有误,可以请我纠正我吗?另外,SOAP在当今的意义是什么?人们仍在开发新的基于SOAP的API,还是现在已经成为传统?
51 rest  api  web-services  soap 

14
RESTful API设计。如果没有行,我应该返回什么?
我目前正在使用Slim Framework为社交网络编码API。我的问题是:当json结构中没有要返回的行时,最佳实践是什么? 可以说,此调用/ v1 / get / movies从表电影名称返回2行: [ {"name": "Ghostbusters"}, {"name": "Indiana Jones"} ] 但是,然后我调用了/ v1 / get / books,该表中没有行。我应该只返回一个空结构吗? [ ] ...或者消息和错误代码会更好吗? [ "errors": { "message": "no matches found", "code": 134 } ] 哪个更好的做法?(该API将在iOS和Android应用中使用)谢谢!

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.