Questions tagged «rest»

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

10
如果无法实现基于REST的事务,那么REST到底有什么用呢?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 10年前关闭。 研究REST时,任何人可能会注意到的第一件事是没有定义任何事务语义,有人说这与REST是隐含的,而其他人则说任何尝试都会导致REST系统的“污染”。 。 但为了争辩,可以说REST确实成为一种流行的“ api”选择,并且宇宙中的每个站点都开始公开宁静的入口点。 没有交易行为(我说的是非补偿性),这些功能到底有什么用?因为在我看来REST的好处之一是它分解了数据的组成部分,您可能会认为这使它们可以使智能客户端从多个服务中组成数据(并添加和调整组成的数据)。但是,如果我无法独立地原子地更改此数据组成,那么使用REST就变得毫无用处。 随着时间的流逝以及对严重数据公开的需求的到来,我们想要的是:简单(REST赢得了胜利),并支持事务行为,因此我们可以可靠地操作这些数据。 现在,我已经在研究中多次阅读了一个特定的论证,它与我们应该如何考虑REST中的事务有关,给出的示例是购物车,您在其中隐式具有隔离性,因为购物车是你的。 但是我不同意这种说法,首先,购物车具有隔离功能只是方便,这不是事务隔离。如果在应用程序的某些部分正在读取数据的同时对购物车进行操作,会发生什么情况从中?我不希望应用程序的读取部分看到“仍在事务中”的数据。 更不用说并非所有数据更改都具有隐式事务模型这一事实,而通过多种服务进行的事务肯定没有。 在我看来,事务需要发生,并且需要以一种使实际的REST调用不了解事实的方式发生(将剩余的负载添加为一个大的否定,但是添加标头可以)。 我已经阅读了一些有关如何通过REST创建事务模型的建议,并且正在编写的一些规范似乎是最近的。 有什么真正的想法吗?不应有比REST更多的东西,以便可以利用REST的简单性来抵制可靠的数据操纵(“酸”交易)。 如果不是,我们是否有望真正做到这一点,并告诉服务开发人员,如果他们想在纯数据世界中进行交互,他们需要支持诸如肥皂之类的单片产品吗?甚至更糟糕的尝试将自己的自定义事务支持构建到REST之类的东西中,从而使每个服务都成为非标准服务并破坏REST的全部功能? 预先感谢您的任何想法。 编辑,添加了简短的场景: 想象一下一个客户窗体,该窗体负责创建专辑,为方便该专辑,而不是要求用户提供uri的艺术家资源,他们可以从艺术家列表中选择(很可能是从艺术家目录中获取) 。 为了便于使用,客户端可以手动输入歌手姓名,以便他们可以创建歌手“内联” ..在发布场景中,客户端代码理解这一点,并且在发送创建专辑请求之前,客户端首先尝试确定如果该艺术家已经存在,则为该艺术家获取uri,否则创建该艺术家并获取该艺术家uri。 然后,客户端代码继续创建相册,这比通常的客户端更聪明,它不仅仅位于REST和“笨拙”的发布之上,而是具有一些处理纯REST逻辑的交互。 但是,在这种情况下,最好先确保不创建艺术家,除非创建了专辑,除非首先创建了艺术家。 这并不像事务所暗示的那样“关键”,但是它定义了客户端代码宁愿作为一项操作发生的一组工作(毕竟,它使用户看起来像是一项操作)。 在这种情况下,我看到的唯一指导是在专辑创建失败的情况下让客户端进行补偿操作,特别是调用删除歌手。但这似乎是有问题的,因为委托人以为艺术家是被孤立的人,尽管可能性不大,如果另一个委托人已经“看到”该艺术家并分配给他,会发生什么? 这些是我对进行数据更改的关注,虽然当然还有其他差距(谁说不能再以后删除艺术家),但是这些动作并不透明(即,这些动作不是自动进行的)客户,但用户已明确要求的内容)。 我希望这有助于阐明该主题。

5
您如何调试MVC 4 API路由?
我有一个使用RESTsharp与我的MVC4 RESTful服务器通信的WP7游戏,但是我经常遇到使请求正常工作的问题,因此我想调试失败的地方。 这是一个示例,其中我的ConstructorGameController被命中,但是该Post方法未命中,我不明白为什么。 客户代码: public void JoinRandomGame() { client = new RestClient { CookieContainer = new CookieContainer(), BaseUrl = "http://localhost:21688/api/", }; client.Authenticator = GetAuth(); RestRequest request = new RestRequest(Method.POST) { RequestFormat = DataFormat.Json, Resource = "game/" }; client.PostAsync(request, (response, ds) => {}); } 服务器代码: public void Post(int id) { if …

4
如何以RESTful方式公开验证API?
我通常是RESTful API设计的狂热者,但是我不确定如何将REST原理应用于验证API。 假设我们有一个用于查询和更新用户的个人资料信息(名称,电子邮件,用户名,密码)的API。我们认为公开的一个有用功能就是验证,例如查询给定用户名是否有效和可用。 在这种情况下,有哪些资源?应该使用哪些HTTP状态代码和/或标题? 首先,我GET /profile/validate将查询字符串参数作为参数并返回,204或者返回400有效值或无效值。但validate显然是动词而不是名词。
71 api  http  rest 

6
将Fiddler与基本身份验证结合使用以访问RESTful WebAPI
我有一个可以正常工作的WebAPI。我已经在本地测试并部署到我的服务器,并在IIS中将此服务配置为使用基本身份验证。我能够浏览到我的服务,并且收到了我期望的身份验证挑战,并且一切正常!现在,我想使用Fiddler进行测试,并且我已经构建了到特定URL的POST,并且出现401(未经授权)错误。因此,我决定在请求标题中添加base64字符串,现在出现500错误。 我想知道的是,我的请求标题看起来正确吗?我显然要混淆我的Host和base64字符串,该字符串包含用于身份验证挑战的格式username:password。 User-Agent: Fiddler Host: xxx.xxx.xxx.xxx:xxxx Content-Length: 185 Content-Type: text/json Authorization: Basic jskadjfhlksadjhdflkjhiu9813ryiu34

3
REST和身份验证变体
我目前正在研究.net的REST库,我想听听有关我拥有的一个开放点的一些意见:REST和身份验证。 这是与库一起使用的RESTful接口的示例: [RestRoot("/user")] public interface IUserInterface { [RestPut("/")] void Add(User user); [RestGet("/")] int[] List(); [RestGet("/get/{id}")] User Get(int id); [RestDelete("/delete/{id}")] void Delete(int id); } 然后,服务器代码仅实现该接口,客户端可以通过工厂获得相同的接口。或者,如果客户端未使用库,则标准HTTP请求也可以使用。 我知道,有使用HTTP基本身份验证或将令牌发送到需要经过身份验证的用户的请求的主要方法。 第一种方法(HTTP基本身份验证)具有以下问题(部分特定于Web浏览器): 密码随每个请求一起发送-即使使用SSL,也会有某种“不好的感觉”。 由于密码是与请求标头一起发送的,因此本地攻击者很容易查看发送的标头以获取密码。 密码在浏览器的内存中可用。 没有使用户“会话”过期的标准方法。 使用浏览器登录会中断页面​​的外观。 第二种方法的问题更多地集中在实现和库使用上: 每个需要认证的请求URI必须具有用于令牌的参数,该参数非常重复。 如果每个方法实现都需要检查令牌是否有效,则还有很多代码要编写。 该界面将变得不那么具体如[RestGet("/get/{id}")]对[RestGet("/get/{id}/{token}")]。 将令牌放在何处:URI的末尾?后根?别的地方? 我的想法是将令牌作为参数传递给URL,例如http:/server/user/get/1234?token=token_id。 另一种可能性是将参数作为HTTP标头发送,但是我猜这会使普通HTTP客户端的使用变得复杂。 令牌将作为每个请求的自定义HTTP标头(“ X-Session-Id”)传递回客户端。 然后可以从接口中完全提取该令牌,并且任何需要身份验证的实现都可以询问令牌(如果给定)属于哪个用户。 您是否认为这会严重违反REST或您有更好的主意?

1
REST API授权和身份验证(Web +移动)
我已经阅读了有关oAuth,Amazon REST API,HTTP Basic / Digest等的信息,但无法将其全部整合为“单个”。这可能是最接近的情况-为移动应用程序创建API-身份验证和授权 我想建立以API为中心的网站-服务。因此(一开始)我将在中心拥有一个API,而网站(PHP + MySQL)将通过cURL,Android和iPhone通过它们的网络接口进行连接。因此,有3个主要客户-3个API密钥。其他开发人员也可以通过API接口进行开发,他们将获得自己的API密钥。根据用户级别的状态,API操作将被接受/拒绝,如果我是管理员,则可以删除任何内容,等等,其他所有操作都只能操作其本地(帐户)数据。 首先,授权-我应该使用oAuth + xAuth还是我自己的某种实现(请参阅http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html?r=9197)?据我了解,Amazon服务用户是== API用户(具有API密钥)。在我的服务中,我需要将标准用户/帐户(在网站上注册的用户)和开发者帐户(应具有其API密钥)分开。 因此,我首先需要授权API密钥,然后验证用户本身。如果我使用亚马逊的方案检查开发人员的API密钥(授权他们的应用程序),那么我应该使用哪个sheme进行用户身份验证? 我读到有关通过api.example.org/auth(通过HTTPS,HTTP Basic)发布我的用户名和密码,然后在随后的每个请求中转发令牌的方式获得令牌的信息。如果同时在Android和网站上登录,如何管理令牌?如果我仅在第一个请求(传输用户名和密码时)仅使用SSL而在其他请求上仅使用HTTP时,中间人攻击怎么办?在此示例中,密码保护REST服务不是问题吗?

8
记录RESTful API的标准方法
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 我正在为新的内部Web服务编写RESTful API规范。它不是很长,也不是很简单,但是即使如此,这也是我第一次使用严格的REST(而不是出于实际原因作弊-避免这样做,PUT并且DELETE因为它们在PHP中很痛苦,依此类推)。我想知道是否有任何标准方法或最佳实践来记录REST接口?我希望团队中的其他成员能够一目了然地理解它,对于希望编写客户端的任何人,也可以在不了解底层代码的情况下做到这一点。

2
如何在Postman测试中读取环境变量?
我正在使用Postman的打包应用程序版本针对我的Rest API编写测试。我正在尝试管理连续测试之间的状态。为方便起见,暴露给Javascript测试运行时的Postman对象具有设置变量的方法,但没有用于读取变量的方法。 postman.setEnvironmentVariable("key", value ); 现在,我可以通过{{key}}结构在下一个调用中读取该值,该结构从当前环境中吸收值。但是,这在测试中不起作用;它仅在请求构建中起作用。 因此,是否有地方可以从测试中阅读这些内容?
70 rest  testing  postman 

5
我可以更改浏览器发送的HTTP请求的标头吗?
我寻找到一个宁静的设计,想用HTTP方法(POST,GET,...)和HTTP头尽可能地。我已经发现浏览器不支持HTTP方法PUT和DELETE。 现在,我正在寻找相同资源的不同表示形式,并希望通过更改Accept请求的标头来实现。根据此Accept标头,服务器可以在同一资源上提供不同的视图。 问题是我没有找到一种方法告诉浏览器更改此标头。 该<a..>标签具有一个类型的属性,可以有一个MIME类型,看起来像一个很好的候选人,但头仍然是浏览器的默认(在Firefox它可以改变about:config与network.http.accept.default键)。

12
Django Rest Framework:创建对象后禁用字段更新
我试图通过Django Rest Framework API调用使我的用户模型成为RESTful,以便我可以创建用户并更新其个人资料。 但是,当我与用户一起执行特定的验证过程时,我不希望用户在创建帐户后能够更新用户名。我尝试使用read_only_fields,但这似乎在POST操作中禁用了该字段,因此在创建用户对象时我无法指定用户名。 我该如何实施呢?目前存在的API的相关代码如下。 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'password', 'email') write_only_fields = ('password',) def restore_object(self, attrs, instance=None): user = super(UserSerializer, self).restore_object(attrs, instance) user.set_password(attrs['password']) return user class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ serializer_class = …

5
是否可以在没有内容长度标题的情况下将文件上传到S3?
我正在使用内存有限的计算机上工作,我想以流方式将动态生成的(非磁盘)文件上传到S3。换句话说,开始上传时我不知道文件大小,但最后我会知道。通常,PUT请求具有Content-Length标头,但也许可以解决此问题,例如使用多部分或分块的内容类型。 S3可以支持流式上传。例如,在这里: http://blog.odonnell.nu/posts/streaming-uploads-s3-python-and-poster/ 我的问题是,在上传开始时无需指定文件长度即可完成相同的事情吗?
70 http  rest  soap  stream  amazon-s3 

18
TypeError:db.collection不是函数
我正在尝试将数据发布到在mLab上创建的数据库中,但出现此错误,但我不知道出了什么问题。我是新来的。所以我在这里发布了我要实现的代码,该代码取自本教程https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes- a07ea9e390d2。 server.js const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const db = require('./config/db'); const app = express(); const port = 8000; app.use(bodyParser.urlencoded({extened:true})); MongoClient.connect(db.url,(err,database) =>{ if (err) return console.log(err) require('./app/routes')(app,{}); app.listen(port,() => { console.log("We are live on"+port); }); }) db.js module.exports = { url : …

4
RestTemplate线程安全吗?
Spring是RestTemplate线程安全的吗?那是 是RestTemplate可以安全共享多个连接的策略对象。要么 是一个RestTemplate连接对象(如数据库连接),使用时无法共享,并且需要为每个连接重新创建或池化。

4
使用AngularJS进行身份验证,使用REST Api WS进行会话管理和安全性问题
我开始使用angularJS开发Web应用程序,但不确定是否所有内容(客户端和服务器端)都受到正确保护。安全性基于单个登录页面,如果可以对凭据进行检查,则我的服务器将发回具有自定义时间有效性的唯一令牌。所有其他REST api均可通过此令牌访问。该应用程序(客户端)浏览至我的入口点,例如:https : //www.example.com/home.html用户插入凭据并收到唯一令牌。该唯一令牌是使用AES或其他安全技术存储在服务器数据库中的,不是以明文格式存储的。 从现在开始,我的AngluarJS应用将使用此令牌对所有公开的REST Api进行身份验证。 我正在考虑将令牌临时存储在自定义的http cookie中;基本上,当服务器验证凭据时,它将发回新的Cookie Ex。 app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T cookie的安全和HTTP Only标志设置为打开。Http协议直接管理新的cookie并将其存储。连续的请求将向cookie提供带有新参数的cookie,而无需对其进行管理并使用javascript进行存储;在每次请求时,服务器都会使令牌无效并生成一个新令牌,然后将其发送回客户端->防止使用单个令牌进行重放攻击。 当客户端从任何REST Api收到HTTP状态401未经授权的响应时,角度控制器将清除所有cookie,并将用户重定向到登录页面。 我是否应该考虑其他方面?将令牌存储在新的cookie或localStorage中更好吗?关于如何生成独特的强令牌的任何技巧? 编辑(改进): 我决定使用HMAC-SHA256作为会话令牌生成器,有效期为20分钟。我生成一个随机的32字节GUID,附加一个时间戳,并通过提供40字节的密钥来计算HASH-SHA256。由于令牌的有效性非常低,因此几乎不可能获得冲突。 Cookie将具有域和路径属性,以提高安全性。 不允许多次登录。

10
找不到针对媒体类型= application / json的MessageBodyWriter
在将JAX-RS服务用作JSON时遇到了问题。 下面,我添加了我的代码。 这是我的服务班级: //Sets the path to base URL + /hello @Path("/hello") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class Hello { @GET @Produces("application/json") public Student getStudent() { Student s = new Student(); s.first_name = "Test First Name !!!"; s.last_name = "Test Last Name!!!"; return s; } Student 我正在尝试从服务中获得的课程: @XmlRootElement public class Student implements …
68 java  rest  jersey  jax-rs 

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.