Questions tagged «rest»

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

5
如何模拟REST API?
我正在研究一个新项目,该项目将从第三方REST API查询数据。这是用于实时体育数据供稿,因此,供稿仅在实际进行比赛时才起作用。 尽管第三方提供了很好的文档(XSD等),但是他们无法模拟游戏的进行,因此要测试我针对该API编写的代码,我必须等待实际的游戏进行。 我唯一的办法就是自己编写代码来模拟游戏,但这似乎需要大量工作。您将如何处理?
13 api  rest 

2
RESTful API是否应该提供整个表单的数据?
假设我有一个JavaScript Web应用程序,它完全使用RESTful API来处理数据。 假设此应用程序具有数据表单,并且假设我正在/ product / 12345上编辑一条记录。构建表单时,我向/ product / 12345发出RESTful请求并获取JSON数据: { "id": 12345, "name": "Some Product", "active": true, "sales_user_id": 27 } 因此,我的表单显然可以具有用于选择销售人员的下拉列表。我需要填充此列表。 数据应该从哪里来?最常见的方法是什么? 使其成为/ product / 12345请求响应的一部分有意义吗? { "id": 12345, "name": "Some Product", "active": true, "sales_user_id": 27, "sales_users": [ {"id": 1, "name": "Anna Graham"}, {"id": 2, "name": "Dick Mussell"}, {"id": …
13 api  rest  forms 

7
为什么小的固定词汇表被视为RESTful服务的优势?
因此,RESTful服务的词汇表中有一组固定的动词。RESTful Web服务从HTTP方法获取这些信息。定义固定的词汇表具有一些假定的优势,但是我并不十分了解这一点。也许有人可以解释。 为什么REST概述的固定词汇表比为每个状态动态定义词汇表更好?例如,面向对象的编程是一种流行的范例。RPC是用来定义固定接口的,但是我不知道为什么人们会认为RPC受这些限制的限制。我们可以动态指定接口,就像RESTful服务动态描述其内容结构一样。 REST被认为是有利的,因为它可以在不扩展词汇量的情况下增长。RESTful服务通过添加更多资源而动态增长。通过动态指定每个对象的词汇表来扩展服务有什么问题?我们为什么不只使用在对象上定义的方法作为词汇,而让我们的服务向客户描述这些方法是什么以及它们是否有副作用? 从本质上讲,我感觉到服务器端资源结构的描述等同于词汇表的定义,但是随后我们被迫使用有限的词汇表来与这些资源进行交互。 固定的词汇量真的能使客户端的关注与服务器的关注脱钩吗?我当然必须关心服务器的某些配置,这通常是RESTful服务中的资源位置。抱怨使用动态词汇似乎不公平,因为无论如何我们都必须动态地推理如何理解这种配置。RESTful服务描述了您可以通过超媒体识别对象结构而进行的转换。 我只是不明白什么使固定的词汇表比任何自我描述的动态词汇表更好,后者可以在类似RPC的服务中很好地工作。这仅仅是限制HTTP协议词汇量的不好理由吗? 反射 只是为了澄清我的想法比我做的更好。假设您正在设计任何通用的API,甚至可能都不是面向Web的。如果有人说您只能在对象上使用这些方法名称,您会感到高兴吗?REST不仅限于HTTP,而是考虑您编写的每个API,面向Web或以其他方式仅由包含GET POST PUT和DELETE方法的对象组成的API的情况。因此,您无法定义该object.foo方法。您必须定义一个名为foo的新对象,并调用其GET方法。从本质上讲,这就是REST的工作方式,这让我有些不舒服。您对foo的作用没有更好的一般理解,只是被迫为本质上是父对象上的方法创建一个新对象。此外,您的API同样复杂,通过创建更多对象,您隐藏了接口的复杂性。RESTful Web服务迫使我们采用一个接口,该接口在我们要公开的API上下文中可能足够,也可能不够。也许有很好的理由使用面向Web的API来执行此操作,但是有理由不为每个通用API中的每个对象采用标准接口。一个实际的例子将不胜感激。

4
如果拥有HTTPS,为什么我们需要REST服务安全性
我指的是这篇出色的文章,网址为http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/,其中提到了类似于Web服务安全性的亚马逊。但是,在团队中有人问我一个问题,如果我们已经使用HTTPS,为什么为什么需要它。我无法回答,因为在我看来确实如此,尽管直觉告诉我,它们可能是正确的。 在提供REST服务时,是否还有HTTPS无法使用的地方?喜欢第三方网站? 如果有人在通过公共互连网上确保Web服务安全方面有经验,请向您提供一些经验。 提前致谢。 编辑:为了澄清,我不是在谈论用户身份验证,而是更多的客户端身份验证。可以假定用户身份验证是基于HTTPS + REST的纯文本。 我担心的是,这仍然允许任何人在没有我的客户端的情况下使用Web服务,因为所有内容都是纯文本,尽管通过HTTPS,客户端端点仍然可以在没有客户端应用程序的情况下使用我的Web服务。
13 rest 

2
比较TCP / IP应用程序与HTTP应用程序[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我对开发使用Java编写的面向用户的大型网站感兴趣。 至于设计,我正在考虑开发独立的模块化服务,这些服务可以作为我的主要Web应用程序的数据提供者。 至于编写这些模块化服务(数据提供程序),我可以利用现有的框架(如Spring)并按照RESTful设计模式开发这些服务,并通过HTTP和消息格式(如JSON)公开资源...或者我可以利用现有的网络像Netty这样的框架(http://netty.io/)和像Protobufs这样的序列化格式(https://developers.google.com/protocol-buffers/docs/overview),并开发一个TCP服务器来来回发送序列化的protobuf有效载荷。 您何时应选择一个?使用Protobufs之类的序列化格式并通过网络发送字节流会有任何好处吗?仅使用JSON会产生开销吗?使用TCP / IP和使用HTTP之间有多少开销?什么时候应该使用Spring over Netty来建立这样的服务,反之亦然?
13 java  rest  http  serialization  tcp 

1
我什么时候应该使用AtomPub?
我一直在进行有关RESTful Web服务设计的研究,我已经达到了我认为是关键的决策点,因此我想将其提供给社区以获取一些建议。 为了遵循RESTful架构的原则,我想提供一个可发现的API,因此我将尽可能全面地支持各种HTTP动词。我的困难在于选择这些资源的表示形式。您会发现,我很容易想出自己的API,该API涵盖了如何显示搜索结果以及如何提供与其他资源的链接,但这对我的应用程序来说是唯一的。 我已经阅读了有关Atom发布协议(RFC 5023)的信息,以及OData如何促进其使用,但它似乎为(当前)一个相当简单的API增加了额外的抽象层次。 所以我的问题是,开发人员何时应该选择AtomPub作为表示形式的选择-如果有的话?如果不是,当前推荐的方法是什么?

3
分层数据的平面或嵌套JSON?
我已经来回切换了约5次。这个REST端点/api/tags/仅供内部使用(没有第三方客户端),我是唯一使用它的人。 我要在这两种表示形式之间做出决定: 平面 { "types":[ { "id":1, "text":"Utility" }, { "id":7, "text":"Lease Terms" }, ], "tags":[ { "id":8, "text":"Water", "type":1 }, { "id":9, "text":"Electricity", "type":1 }, { "id":5, "text":"Minimum 12 month lease", "type":7 }, { "id":17, "text":"lease negotiable/flexible", "type":7 }, ] } 它有点模块化。可以添加另一个顶层,例如“国家/地区”而不会破坏兼容性。 巢状 { "1":{ "text":"Utility", "tags":{ "8":{ "text":"Water" …
12 rest  api-design  json 

2
我应该允许未知的参数吗?
我正在设计一个RESTful API,并遇到标题问题,为清楚起见已重述: 如果客户端发送无法识别的参数,我应该快速失败吗?例如, http://example.com/api/foo?bar=true&paula=bean 在上面,bar是有效参数,但paulaAPI未指定。我是不是该 警告客户错误 快速失败 忽略它 如果我警告客户端,我只能对第一个参数发出警告,因为它们可能发送的数量几乎是无限的,并且服务器可能要做的更好。同样,失败时,只会将第一个无效参数指定为问题。 我更喜欢失败而不是发出警告来迫使程序员采取行动,因为否则他们可能会忽略问题并继续浪费资源,或者最终不经意地养成自己。在这方面什么都不做会更糟。 我的论点有意义吗?在这种事情上有公认的做法吗?
12 rest  api-design 

1
许多异步调用与对API的单次调用
我们正在开发REST API,其中的HTML5前端将通过javascript使用REST API。该应用程序供组织内部使用,通常有大约300个用户,但我们希望扩展到1000个左右的用户。 通常不会在LAN内建立与API的连接,因此连接的质量和延迟会很好,尽管不排除偶尔会在Internet上使用3G / 4G时连接速度较慢且滞后时间较长的情况。 我们认为的两个选择是: 前端将同时对API进行多次异步调用,以加载接口的各个组件。 优点:简单。 缺点:与服务器的连接更多。 前端的控制器将对API进行一次调用,将需要获取的对象作为参数传递给参数。 优点:尽管服务器将与数据库建立多个连接,但仅与服务器建立一个连接。 缺点:在前端和API中都需要机制。它使设计复杂化。 进一步说明:将有不同的资源... /产品... /位置等。可以单独获取这些资源,但是将有另一个抽象资源... / screen?Product&Locations将在一次调用中获取。
12 rest  api  ajax 


1
RESTful API应该有多离散?
我以前从未构建过RESTful API,并且想知道它应该有多离散? 例如,假设我有一个客户,该客户的姓名,地址,电话号码,电子邮件地址,语言等。 是否有一种方法可以更新每个单独的字段(更新地址,更新电子邮件地址等),还是应该为整个客户提供一个单独的更新,并且每个字段都是可选的?
12 api  rest 

2
在RESTful API中实现命令模式
我正在设计HTTP API,希望使其尽可能地具有RESTful风格。 有些动作的功能会散布在一些资源上,有时需要撤消。 我以为自己,这听起来像是命令模式,但是我如何将其建模为资源呢? 我将介绍一个名为XXAction的新资源,例如DepositAction,它将通过这样的方式创建 POST /card/{card-id}/account/{account-id}/Deposit AmountToDeposit=100, different parameters... 这实际上将创建一个新的DepositAction并激活它的Do / Execute方法。在这种情况下,返回201 Created HTTP状态表示操作已成功执行。 之后,如果客户希望查看操作细节,则可以 GET /action/{action-id} 我猜应该阻止Update / PUT,因为此处不相关。 为了撤消操作,我想到了使用 DELETE /action/{action-id} 实际上将调用相关对象的Undo方法,并更改其状态。 假设我只对一次“撤消”感到满意,而无需重做。 这种方法可以吗? 有什么陷阱,不使用它的原因吗? 从客户的观点看是否明白?

3
WCF数据服务(OData)与ASP.NET Web API?超媒体?
我正在设计一个由REST服务和各种客户端(Silverlight,iOS,Windows Phone 7等)组成的分布式应用程序。我已经准备好决定要使用WCF数据服务(OData)来实现我的REST服务,但是现在MVC 4 Web API令我质疑该决定。 我喜欢OData的是免费获得的URI查询和超媒体功能。我不喜欢OData有效负载的详细程度;导线上出现了许多不必要的字符。 我喜欢Web API的原因是有效负载更加简洁,并且具有OData的URI查询功能,但是似乎缺少超媒体(至少是开箱即用的)。我的老板也在推动Web API的开发,因为“微软的力量正在支持它,而OData并没有受到人们的青睐。” 所以我有两个问题: 1)谁能评论Web API和OData的支持/牵引? 2)是否期望Web API在发布时间之前就本机支持超媒体,或者我应该研究任何现成的实现或示例? 谢谢!

4
如果我考虑到用户的故意错误行为,我是否会过度设计?
如果我添加了针对用户的故意不当行为的保护措施(轻描淡写),如果用户可能遭受的伤害与我的代码无关,是否过度设计? 为了澄清,我将公开一个简单的JSON RESTful服务,如下所示: GET /items - to retrieve list of user's items PUT /items/id - to modify an item POST /items - to add a new item 该服务本身并不旨在通过浏览器使用,而只能从由用户控制的第三方应用程序(例如电话应用程序,桌面应用程序等)中使用。同样,服务本身应该是无状态的(即无会话的)。 身份验证通过SSL上的基本身份验证完成。 我说的是这样一种可能的“有害”行为: 用户在浏览器中输入GET网址(没有理由,但是...)。浏览器要求基本身份验证,对其进行处理,并为当前浏览会话存储身份验证。用户无需关闭浏览器即可访问恶意网站,该网站具有恶意CSRF / XSRF javascript,可对我们的服务进行POST。 上述情况极不可能发生,并且我知道从业务角度来看,我不必担心太多。但是为了改善这种情况,您是否认为如果JSON POST数据中也需要用户名/密码,这会有所帮助吗? 还是应该完全放弃基本身份验证,放弃GET,只使用其中包含授权信息的POST / PUT?由于通过GET检索信息也是敏感的。 另一方面,使用自定义标头是否考虑过纯REST实现?我可以删除基本身份验证,并使用自定义标头。这样,至少可以避免来自浏览器的CSRF攻击,并且使用该服务的应用程序将在自定义heather中设置用户名/密码。这种方法的缺点是,现在无法从浏览器使用该服务。

1
REST Web服务的身份验证/访问控制的软件体系结构
我正在设置一个新的RESTful Web服务,我需要提供一个基于角色的访问控制模型。我需要创建一个体系结构,该体系结构将允许用户提供用户名和密码来访问服务,然后根据角色限制他们如何使用服务(可以使用哪些服务,读取与读取/写入等)。分配给该用户。 我环顾了其他问题,发现了我想要的东西。例如,关于如何处理将凭证传递到REST服务的静态身份验证,最佳实践等方面,存在许多精彩的讨论。关于创建网站时程序员应了解的知识(每个开发人员在构建公共网站之前应了解的知识),也有一些很好的指导。 但是我找不到关于实现这些解决方案的软件体系结构的最佳实践和模式的好文章,文章和书。 特别: 用户信息和访问权限应如何存储?(数据模型,位置,格式) 有哪些好的设计模式可以表示和跟踪服务器中的这些模式?(内存中的会话,每次数据库查找等) 在代码库中以哪种安全方式将这些权利映射到服务的良好模式是什么? 哪些架构选择可以帮助保持系统更安全和可靠? 人们从战es中学到了什么? 我正在寻找针对任何特定技术之外的软件体系结构的设计模式和建议。 (如果技术很重要,我计划使用python,twisted和postgresql数据库来实现)

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.