Questions tagged «rest»

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

2
面向Java初学者的RESTful服务的结构
就Java Web开发技能而言,我相对较新。我有一个项目,根据我对API的了解,我认为该项目可以很好地成为RESTful服务的候选人。我正在尝试了解应该如何构造的详细信息,但在谷歌搜索和阅读已有资料方面并没有真正涉足。我希望根据我对该主题的知识和假设,这篇文章能够带来一些验证和/或重定向。 我目前的假设是我的RESTful服务将具有以下结构: 数据库数据(SQL)。 一个ORM(我使用的是相对不受欢迎的ORM,称为CPO,但是对于大多数人来说,它只会被Hibernate取代)。 一个Java管理器类,其方法与ORM进行对话以获得数据 一个Java控制器类,用于处理请求映射,并用于@ResponseBody通过HTTP谓词来指导/处理URL和如何处理数据的动作(http://mysite.com/computers/dell可能GET带有单词“ dell”的请求URL中的参数是一个参数,该参数将返回有关Dell计算机的信息的JSON数组)。 该服务应使用Spring Boot进行,或者以某种方式能够独立存在并且独立于任何其他应用程序。 现在假设以上内容是正确的,那么我将(在非常基本的水平上)拥有一个RESTful服务,任何应用程序都可以使用该服务来使用和使用数据。 所以说我有了我的Web应用程序。假设我正在制作一个有关计算机硬件信息的Web应用程序,而我正在使用Spring来构建此Web应用程序。这是我的假设: 作为JSP,我会有很多看法,而这些JSP包含HTML,CSS和JavaScript。JavaScript将根据需要处理对此应用程序控制器的AJAX调用(如下)。 该Web应用程序还将拥有自己的控制器来处理应用程序的URL请求和路由,然后该控制器将使用该ModelAndView对象或类似的东西与RESTful服务的控制器“对话”,获取正在传递的任何数据,然后将该数据传递回视图(JavaScript,JSP等)进行显示。 我在这里吗?我知道RESTful服务也有一个身份验证方面,但是从概念上讲我还不存在(我的项目将在专用网络中使用,因此此时安全性不是优先事项)。 非常感谢任何见解,批评,知识,反馈或澄清。

2
如何设计API端点以发布子对象并获取所有父母的所有孩子?
例如,我有以下实体:客户,报告。客户可能有很多报告,我认为单个报告管理的端点应该像这样嵌套: /clients/{client_id}/reports/{report_id} 至于一位客户的所有报告,预期会: /clients/{client_id}/reports 但是应该如何寻找一个端点来获取所有客户端的所有报告,以保持API的一致性和良好的设计。 我的方法: (我在某些Google API中看到了它)使用“-”代替它,并将其解析为“全部”: /clients/-/reports 这使端点格式保持不变,但看起来有点不正常,找不到任何以此方式建议的rfc。 为所有报告创建一个单独的端点: /reports 但是要获得客户报告,它仍然是: /clients/{client_id}/reports 重构端点以使“客户端”不是父代,而只是一个过滤器参数: /reports?client={client_id} -一位客户的报告 /reports -所有客户的报告 如果添加新的端点以发布特定客户端的报告,则该外观可能很难看,因为它将是带有URL中参数的POST请求。 还有其他建议吗?
12 rest  api  api-design 

2
RESTful API应该能够返回文件还是仅返回一个位置
这一直困扰着我一段时间。 例如,我们有一个REST API,它为系统提供基本内容,并使用和生成JSON。在此终结点处,它会生成指向图片和描述的URL,并且可以这样找到:// localhost / myApi / pictures / 1 { id: 1, description: "This is a pretty picture of a daisy", URL: <OUR URL> } 现在,OUR_URL应该指向API上的某个位置,例如// localhost / myApi / files / pictures / 1,该位置返回JPG(API后面的应用程序读取文件的物理内容,然后将其流回客户端)。显然,这与生成JSON响应的其余API不同,并且读取和流式传输实际文件会产生开销。 另外,OUR_URL应该指向REST服务范围之外的URL,因此//localhost/files/pictures/1.jpg可以直接在其中读取文件。 所以问题是: RESTful API应该能够返回文件还是仅返回一个位置?

4
MVC和RESTful API服务
MVC非常简单。有一个模型,一个控制器和一个视图。当我们创建一个网站时,这一切都将作为一个整体' 客户端向服务器发送REST关键字请求->服务器将请求的URL与控制器操作相匹配->然后调用模型进行数据收集/处理,以获取结果->并将结果作为HTML页面(视图)返回给客户端。 如果我们正在谈论纯RESTful API Web服务该怎么办?然后,流程类似于“ 客户端向服务器发送REST关键字请求->服务器将请求的URL匹配到控制器操作->然后调用模型进行数据收集/处理,获得结果->并返回结果以JSON ' 返回给客户端。与以前相同,但是没有“视图” ...或者,可以将生成的JSON视为“视图”。从某种意义上讲,我们仅在利用MVC的MC部分。那是应该怎么做的?还是对于仅API服务而不是MVC还有其他更合适的模式吗?

3
什么时候使用REST处理请求与使用AJAX处理请求[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 6年前关闭。 在我的网页上,如果希望显示动态下拉列表(例如,基于所选国家/地区的城市名称),则可以使用AJAX进行。但是我也可以使用REST调用来做到这一点。那我应该使用哪个呢? 我的问题是我真的没有得到REST和任何其他HTTP浏览器请求(也就是表单提交)之间的区别。我查看了REST的正式定义,它似乎与HTTP请求相同。那么REST与AJAX本质上有何不同?
12 rest  ajax 

7
在枚举中具有特殊值“ ALL”是一种好习惯吗
我正在微服务环境中开发一项新服务。这是一个REST服务。为了简单起见,假设路径为:/ historyBooks 此路径的POST方法将创建一个新的历史记录。 假设一本历史书涵盖了一个或多个历史时期。 为简便起见,我们假设我们只有以下人类历史时代: 古 后古典 现代 在我的代码中,我想用来表示它们enum。 方法的主体(有效负载)为JSON格式,并且应包含字段名称eras。此字段是era本书涵盖的值列表。 身体可能看起来像: { "name": "From the cave to Einstein - a brief history review", "author": "Foo Bar", "eras": ["Ancient", "Post Classical", "Modern"] } 在此特定服务中,业务逻辑是: 如果输入中未提供任何时代,则认为本书涵盖了所有时代。 在API审查中,提出了一个建议:为ERAS枚举 包含另一个值ALL,以明确表明已覆盖所有时代。 我认为它有一些优点和缺点。 优点: 显式输入 缺点: 如果提供了列表中的两项,请说ALL和Ancient-从应用程序中获取什么?我想这ALL应该覆盖其他值,但这是新的业务逻辑。 如果我运行查询,对于涵盖特定时代的图书,我将如何代表涵盖所有时代的图书?如果ALL还用于输出(使用相同的逻辑),则用户有责任将其解释ALL为["Ancient", "Post Classical", "Modern"]。 我的问题 我认为拥有新事物ALL比根本没有造成更多的混乱。 你怎么看?您是否要添加此ALL值或不使用它而保留API?
11 rest  api  json  enum 

1
REST服务作为2000多个客户端计算机的应用程序服务器。这是个好主意吗?
我们将使用javaFx中的UI构建一个系统,该用户界面将部署到2000台以上的计算机(最低数量为2000,但将会更多-可以达到5000台计算机)。 由于其他原因/限制,必须将其安装在计算机上,因此我们无法使用Web浏览器界面进行操作。 2000多台计算机将位于不同的地理位置组。通常,连接是好的,但在更偏远的位置可能不是很好。 我正在考虑使用Spring + Spring Boot + Spring Data(java)构建REST服务集群,而不是直接访问数据库。 REST服务将接受并返回Json。 我认为这是个好主意,因为: 该服务将充当数据库连接池(我认为数据库上的2000多个连接会引起问题); 可能有一个将日志传送到其他只读数据库的数据库来服务某些查询; 随着我们可以添加更多机器来运行REST服务,它将更好地扩展; 出于安全性和带宽节省的原因,可以在压缩中使用HTTPS。 无需重新部署2000多台计算机,就可以对业务实体进行一些集中式更改。 它与其他系统更好地集成(只需将其指向REST服务)。 这真的是个好主意吗? 您可以分享一些正面或负面的经验吗? 谢谢。
11 java  design  rest  spring 

2
我应该如何在一个宁静的服务中设计一个有序列表资源?
我一遍又一遍地遇到了同样的问题,但我还没有找到我真正认为是最佳的解决方案。 在应用中说,您有一个有序列表,然后让用户通过拖放等方式更改该顺序。您希望顺序中的更改得以保留。您如何建模? 如何设计有序列表资源的静态服务? 特别是,我应该如何设计list和item宁静的资源的模型?我见过的最常见的设计是item具有order或position属性的实体。我听到的另一种方法是在商品上使用双链表。 什么是一种方法,它不会向数据库写入太多内容,并且通常可以为客户端快速更新和读取?端点应该如何暴露?

3
如何设计REST API来处理非CRUD操作?
我正在尝试将一组基于SOAP的服务转换为RESTful API。 我首先通过分析操作名称来识别资源,然后获得了资源Subscription。 当我需要更新订阅的状态时,不能直接向POST服务器发送请求,因为我没有直接访问资源的权限,但是我需要调用一些RPC样式的操作来更新其属性。此外,仅且仅当我将订阅状态更改为“活动”时,才需要对外部服务的附加调用。 在这些情况下,处理基础操作的最佳实践是什么? 我想出的解决方案是使用查询参数,这样,如果我需要调用激活服务,则可以使用以下方法: POST /subscriptions/{subscriptionid}/?activate=true 考虑到我不能直接更新我的订阅对象字段,是否有最佳实践来处理这种转换? 更新1: 我可以在POST请求的正文中放入一些值,例如“ state”:“ active” 并检查我的服务中要触发的正确操作。

7
通过HTTPS进行身份验证会降低我的应用程序速度吗?
我正在构建一个Web应用程序和RESTful Web服务。 我一直在阅读有关如何验证对Web服务的请求的最佳方法的各种文章。 对我而言,最好的选择似乎是使用HTTP基本身份验证。我阅读的几乎每篇文章都说,身份验证应该通过SSL或等效协议进行加密。 我不太确定这涉及什么。这是否意味着我的整个Web服务必须位于安全的服务器上?这会减慢速度吗?

2
设计REST API的身份验证
我正在为将要生产和使用的REST服务设计API。我花了几天的时间试图弄清楚如何很好地处理身份验证,并认为我终于想出了一些办法。 我基于有关应用程序堆栈的以下事实提出此建议: 客户端和服务器位于.NET4中(客户端配置文件中的客户端部分) 服务器使用WCF REST公开 我真的不想在应用程序的内存中保留用户名和密码 从3开始,我想使用一种令牌身份验证的方式,以便在服务器验证了凭据之后,客户端将获得令牌以供整个应用程序的其余部分使用(这将使我能够做其他事情,例如使用户超时,并能够在网络版本和桌面版本之间无缝移动用户等)。在弄清楚如何使呼叫重播和防篡改之后,我提出了以下建议: 在客户端尝试进行身份验证之前,它会使用ECDiffieHellmanCng该类生成Diffie-Hellman密钥对。 它通过电线发送密钥对的公共部分以及用户名和密码(当然是通过HTTPS)。 服务器验证用户名/密码组合,如果成功,则执行以下操作: 创建一个唯一的会话令牌 生成自己的DH密钥对,并根据客户端提供的公共密钥计算共享密钥 记录其数据库中的会话令牌,共享机密,用户和“最后操作”时间(用于滚动到期窗口) 返回会话令牌,其公共DH密钥和身份验证成功消息 客户端从响应中获取DH密钥,计算共享密钥,并将令牌和密钥存储在内存中。 从那时起,会话令牌/秘密组合的工作方式与大多数其他REST API一样,对请求进行了指纹识别和时间戳记,然后生成了某种HMAC。每当客户端对服务器执行操作时,客户端都会检查令牌/秘密对,并允许该操作有效且未过期,并更新会话中的最后一个操作记录。 我看不到任何明显的缺陷,并且为此可能过度设计了,但是我需要在某个时候学习如何做到这一点。HMAC可以防止重放攻击,DH协商可以防止MITM攻击(我想不到在HMAC / DH之间可以进行有效的攻击)。 任何人都可以在此戳戳?

5
将RESTful设计应用于整个网站?
这一切可能都碰到了新事物,但是我正在努力设计一个完全RESTful的网站。我了解将RESTful设计应用于用户,照片,博客帖子等内容,因为我认为它们就像“对象”。 但是,关于“关于我们”页面呢。那是什么资源?从RESTful的意义上来说,它甚至是一种资源吗?另外,说我去URL“ http://www.example.com/”,我要什么资源?索引资源?

4
乐观锁定不起作用怎么办?
我有以下这种情况: 用户向GET请求/projects/1并接收ETag。 用户从步骤1 开始使用ETag 进行PUT请求/projects/1。 用户/projects/1从步骤1 开始使用ETag 发出另一个PUT请求。 通常,第二个PUT请求将收到412响应,因为ETag现在已过时-第一个PUT请求修改了资源,因此ETag不再匹配。 但是,如果同时发送两个PUT请求(或者一个又一个发送)怎么办?在PUT#2到达之前,第一个PUT请求没有时间处理和更新资源,这导致PUT#2覆盖PUT#1。乐观锁定的全部目的是要避免这种情况的发生。

3
带有向导的网页的REST API设计
我有一个向导格式的网页。API的提交按钮将位于向导的第4步。但是,我希望输入的数据先存储在数据库中,然后再进行向导的下一步。我还希望REST API适用于具有单个选项卡的页面。 因此,我设计了API以采用查询参数action =草稿或提交。如果采取行动,则仅某些字段是必填字段。如果提交了操作,则所有字段均为必填。REST API服务层中的验证将基于查询参数完成。看来我必须在文档中明确指定if / else子句。这是RESTful设计的可接受形式吗?满足这些要求的最佳设计是什么?
11 design  rest 

1
REST API中链接rel =“ self”的意义是什么?
我经常在HTML文档中看到以下内容 <link rel="self" href="http://example.com/something"> 或像这样的JSON link: { rel="self", href="http://example.com/something" } 或XML <atom:link rel="self" href="http://example.com/something" /> 所以我有一些问题: 为什么要包含此链接?它带来什么好处?(请告诉我这是有原因的,而不仅仅是“好的做法”护身符) 如何在客户中利用此链接?此链接的用例是什么? 我什么时候不应该使用此链接?什么时候包括它毫无意义?
11 rest  web-api 

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.