Questions tagged «rest»

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

6
REST端点在发布前显示预览
我正在设计一个新的Web应用程序,该应用程序由REST后端和HTML + JS前端提供支持。 它具有一个POST方法来更改一个实体(我们称为Config),这在应用程序的许多元素的状态下具有多种副作用。假设以这种方式执行POST: POST /api/config BODY {config: ....} 因此,我想在进行这些更改之前显示预览,以使最终用户能够注意到要更改的内容。 我首先想到的是为预览创建一个GET端点,发送实体新状态的主体。这条路: GET /api/preview/items BODY {config: ....} 可能显示具有新配置的项目的新状态。 GET /api/preview/sales BODY {config: ....} 可能会使用新配置显示销售的新状态。 使用GET动词似乎是个好主意,因为我不会更改应用程序的状态。然而,随着使用请求主体的GET请求似乎气馁。 有什么好的做法吗?其他选择可能是使用一种方法将配置存储为草稿,并使用其他方法显示结果,但这将需要额外的步骤,并且必须在服务器中管理草稿: POST /api/preview/config BODY {config: ....} GET /api/preview/items?idPreviewConfig=1

3
在RESTful API中处理令牌更新/会话到期
我正在构建一个使用JWT令牌进行用户身份验证的RESTful API(由login端点发出,然后在所有标头中发送),并且需要在固定时间后刷新令牌(调用renew端点,该端点将返回更新的令牌) )。 用户的API会话有可能在令牌到期之前变得无效,因此我的所有端点都首先检查以下各项:1)令牌仍然有效,以及2)用户会话仍然有效。由于客户端将令牌存储在本地,因此无法直接使令牌无效。 因此,我所有的端点必须向我的客户发出两种可能情况的信号:1)是时候续订令牌了; 2)会话已变为无效,并且不再允许它们访问系统。我可以想到两种替代方法,当两种情况之一发生时,我的端点可以向其客户端发出信号(假设客户端可以适应任一选项): 如果会话无效,则返回http 401代码(未经授权),或者在令牌到期且需要调用renew端点时返回412代码(前提条件失败),这将返回200(正常)代码。 返回401,表示会话无效或令牌已过期。在这种情况下,客户端将立即调用该renew端点,如果它返回200,则刷新令牌,但是如果renew还返回401,则意味着该客户端不在系统之外。 您会推荐上述两种选择中的哪一种?哪一个会更标准,更容易理解和/或更RESTful?还是您会建议完全不同的方法?您发现这两种选择有明显的问题或安全隐患吗?如果您的答案包括支持您的观点的外部参考,则可以加分。 更新 伙计们,请关注一个真正的问题- 表示续订/会话无效的两个http代码替代方案中哪一个最好?不要介意我的系统使用JWT 和服务器端会话的事实,这是我的API针对非常特定的业务规则的特性,而不是我正在寻求帮助的部分;)

1
RESTful HTTP和websocket在同一应用程序中?
如果某个应用程序已经打开WebSocket了实时供稿,是否应该将其AJAX用于与服务器的其他通信? 因为连接已经打开,我们应该将其用于Request/Response不是实时的请求吗? 我更喜欢RESTful HTTP请求,因为我发现它们更易于调试。您可以使用带有url或curl的浏览器来测试API返回的内容。您无需编写代码即可打开WebSocket。 在同一应用程序中拥有RESTful HTTP API和会很奇怪WebSocket吗?
17 rest  ajax  websockets 

2
事件源和REST
我遇到了事件源设计,我想在需要REST客户端(准确地说是RESTful)的应用程序中使用。但是,由于REST非常像CRUD,并且事件源基于任务,因此我无法将它们连接在一起。我想知道您如何设计基于对REST服务器的请求的命令创建。考虑以下示例: 借助REST,您可以将一个新状态放入名为File的资源中。在一个请求中,您可以发送新的文件名,可以更改父文件夹和/或更改文件的所有者,依此类推。 如何构造服务器,以便可以使用事件源。我在考虑这些可能性: 确定服务器上哪些字段被改变,并创建相应的命令(RenameFileCommand,MoveFileCommand,ChangeOwnerCommand,...)并单独派遣这些。但是,在这种设置中,每个命令都可能失败,从而使其他命令无法进行事务处理,从而无法进行资源的“原子”更改。 调度只需要一个命令(UpdateFileCommand),并在命令处理程序,更精确地在总量上,确定哪些领域发生了变化,并发送单个事件,而不是(FileRenamedEvent,FileMovedEvent,OwnerChangedEvent,...) 我一点都不喜欢这个命令:在对服务器的请求中,我会在标头中指定要使用的命令,因为UI仍基于任务(但通信是通过REST完成的)。但是,在REST通信的任何其他用途(例如,外部应用程序)中,它都将失败,因为它们不一定要仅更改一个请求中的一个字段。另外,我在UI,REST和基于ES的后端中引入了很大的结合。 您更喜欢哪一个,或者有更好的方法来解决这一问题? 旁注:使用Java和Axon Framework编写的用于事件源的应用程序。

2
API应该如何使用http基本身份验证
当API要求客户端对其进行身份验证时,我已经看到使用了两种不同的方案,并且我想知道哪种情况适合我的情况。 示例1.一个公司提供的API,允许第三方使用HTTP Basic使用令牌和机密进行身份验证。 示例2. API通过HTTP Basic接受用户名和密码来认证最终用户。通常,他们会获得令牌以供将来请求。 我的设置:我将有一个JSON API,它将用作移动和Web应用程序的后端。对于移动应用程序和Web应用程序来说,似乎都附带令牌和秘密发送的好习惯,因此只有这两个应用程序才能访问阻止任何其他第三方的API。 但是移动和Web应用程序允许用户登录和提交帖子,查看其数据等。因此,我希望他们也可以通过HTTP Basic在每次请求时登录。 我会以某种方式同时使用这两种方法还是仅在每个请求上发送最终用户凭据(用户名和令牌)?如果仅发送最终用户凭据,是否将它们存储在客户端的Cookie中?

2
超媒体(HATEOAS)有什么好处?
对于供程序使用的API(相对于人类直接浏览您的API而言),HATEOAS的好处我不理解。当然,客户并没有绑定到URL模式,但是他们绑定了数据模式,这在我看来也是一样。 例如,假设我想查看订单上的商品,假设我已经发现或知道订单URL。 HATEOAS: order = get(orderURL); item = get(order.itemURL[5]); 非HATEOAS: order = get(orderURL); item = get(getItemURL(order,5)); 在第一个模型中,我必须知道订单对象具有itemURL字段的事实。在第二个模型中,我必须知道如何构造商品URL。在这两种情况下,我都必须提前“知道”某件事,所以HATEOAS实际为我做什么?

1
REST API安全性:HMAC /密钥哈希与JWT
我刚刚读了这篇已有几年历史的文章,但是描述了一种保护REST API的聪明方法。实质上: 每个客户都有唯一的公钥/私钥对 只有客户端和服务器才知道私钥。它永远不会通过电线发送 对于每个请求,客户端都会获取多个输入(整个请求本身,当前时间戳和私钥),并通过HMAC函数运行它们以生成请求的哈希 然后,客户端将常规请求(包含公钥)和哈希发送到服务器 服务器会查询客户端的私钥(基于提供的公钥),并进行一些时间戳检查(我当然不理解),以验证请求是否不是受害对象。 重播攻击 如果一切正常,则服务器使用私钥和相同的HMAC函数来生成其自己的请求哈希 然后,服务器比较两个哈希(客户端发送的哈希值以及它生成的哈希值);如果它们匹配,则对请求进行身份验证并允许其继续 然后我偶然发现了JWT,听起来很相似。但是第一篇文章根本没有提到JWT,因此我想知道JWT是否与上述auth解决方案不同,如果有所不同,怎么做。

7
什么更快?使用REST API还是直接查询数据库?
什么是更快的性能明智的选择?创建REST API并让您的Web应用使用REST API来与数据库进行所有交互,或者直接查询数据库(即使用您的语言用来查询数据库的任何典型对象,例如Java的JDBC)? 我使用REST的方式: 您在代码中创建一个对象以调用REST方法 调用http方法 REST API中的代码查询数据库 数据库返回一些数据 REST API代码将数据打包到Json中并将其发送到您的客户端 客户端收到Json / XML响应 将响应映射到代码中的对象 另一方面,直接查询数据库: 使用查询字符串创建对象以查询数据库 数据库返回一些数据 将响应映射到代码中的对象 因此,这是否意味着使用REST API会更慢?也许取决于数据库的类型(SQL vs NoSQL)?
16 database  rest  sql 

4
合并多个HTTP请求以节省带宽是否是一个好主意?
我正在准备一个单页应用程序,该应用程序有时会在缓慢的移动连接上使用。就API请求而言,它的某些部分相当繁重(为新的屏幕显示获取10个不同的资源)。 现在,将这些服务合并到提供所有必需数据的服务中,但是就REST原理而言不是“纯”的,这是一个好主意吗?是否会有可观的性能提升?
16 api  rest  http 

1
如何对REST Web服务进行单元测试?
我是单元测试的新手,我有一个REST Web方法,它仅调用DB并填充DTO。伪代码是 public object GetCustomer(int id) { CustomerDTO objCust = //get from DB return objCust; } 我的疑问是如何编写针对这些方法的测试以及要包括的测试类型(集成/单元)。对于单元测试,是否需要命中数据库。如果是这样,并且我传递了一个客户ID并执行了一些断言,则数据可能会更改,最终导致失败。 我想我在这里缺少了解这些概念的内容。

2
何时在RESTful API中使用嵌套资源
我有两个资源:用户和链接。 用户可以具有几个与之关联的链接。我已经设计了RESTful API,以便您可以通过以下URI访问与用户关联的链接: /users/:id/links 但是,我总是需要一个仅用于链接的URI –有时我可能想要所有链接,无论用户是谁。 为此,我有: /links 听起来还好吗?有两个链接的URI吗? 我想知道是否应该使用URI来访问用户的链接,例如: /links/user/:id 要么 /links/?user=:id 这样,我只有一个链接资源。
16 api  rest  api-design 

3
表示REST URI中的动作(动词)
我要为客户文件执行打印操作。我还需要执行其他标准操作,例如添加,更新,删除。因此,我有以下内容: 对于创建新客户:URI = / customer / {id},键入= POST,方法名= CreateCustomer() 要更新:URI:/ customer / {id},类型= PUT,方法= UpdateCstomer() 对于删除客户:URI = / customer / {id},键入= DELETE,方法名= DeleteCustomer() 对于视图:URI:/ customer / {id},键入= GET,方法= GetCustomer() 现在,如果需要为该客户打印文档,则需要打印功能。我的URI可能看起来像这样:/ customer / {id},类型= POST,方法= PrintCustomer()。但是我已经将URI和POST类型用于CreateCustomer。我希望URI看起来像这样:/ customer / Print / {id},键入= POST,方法= PrintCustomer()。 但是我的URI中不能包含“ Print”动词。最好的方法是什么?我考虑将/ customer / document / {id}作为URI ...,但是我将遇到相同的问题。我将在“文档”上进行CRUD操作。因此,我再次用尽了用于“打印”的内容。请指教。
16 rest 

3
我应该使用哪种.NET REST方法/技术/工具?
我正在实现RESTful Web服务和几个主要在Silverlight中的客户端应用程序。我在开发API的服务器端和客户端时发现了很多选择,但不确定哪种方法最好。我担心的是稳定性以及一个从现在开始几个月将继续存在的平台。 我们开始将REST Starter Kit与.NET 3.5一起使用,但在更新到.NET 4.0时,移至新的WCF Web API。他们所有的文档都表明WCF Web API替代了RSK。但是,Web API仅在Preview 4中,尚不包括对Silverlight或Windows Phone 7客户端的支持。 WCF Web API看起来像System.ServiceModel.Web库中提供的WCF WebHttp Services东西的包装,这使我认为仅使用内置东西可能会更简单,但是Web API确实提供了一些不错的功能。 我特别想尝试为客户端确定最佳课程。我的主要要求是我需要支持快速,轻松地将反序列化到客户端对象中。Web API提供了一个不错的客户端库,但没有Silverlight版本。 我想使用正在积极开发和支持的最新方法和工具集。 REST入门工具包真的过时了吗? 有没有人成功实现WCF Web API工具包? 通过内置的WCF WebHttp Services功能使用这些功能是否值得System.ServiceModel.Web? 是否有适用于任何客户端(Web,Silverlight等)的单一解决方案? 您有什么建议?
16 .net  rest  wcf 

1
为什么大多数API网关解决方案都不支持“聚合”?
在阅读有关API Gateway的内容时,每一次出现的一件事是API Gateway是一个您应该在其中汇总多个端点的结果的地方。听起来真的很好。但是,许多流行的API网关解决方案(例如AWS API Gateway,Kongo和Netflix Zuul)不支持该功能。您需要自己修改或实施自定义过滤器。 聚合被视为不良做法吗?人们如何从多个端点返回结果?

1
使用REST API验证本地移动应用
我即将开始一个新项目,该项目针对所有主要移动平台(iOS,Android,Windows)的移动应用程序。这将是一个客户端-服务器架构。 该应用程序具有信息性和交易性。对于交易而言,他们必须先拥有一个帐户并登录才能进行交易。我是移动开发的新手,所以我不知道在这些平台上如何完成身份验证部分。客户端将通过REST API与服务器通信。当然会使用HTTPS。 我尚未决定是否要让用户在打开应用程序时登录,还是仅在执行交易时登录。 我有以下问题: 1)像Facebook应用程序一样,您只有在首次打开该应用程序时才输入凭据。之后,您每次打开应用程序都会自动登录。如何做到这一点?只是简单地通过将凭据加密并存储在设备上并在每次应用启动时发送凭据即可? 2)我是否需要针对对REST 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.