好。 我想要使用基于REST的服务。 我想用python。 其实我会用python。 我想要使用它的方式是从命令行/ ipython尝试不同的REST服务,并打算稍后对其进行正式编码。 (我使用的REST服务不是通用API的东西) 我正在寻找一个非常通用的,function齐全的REST客户端/ API在Python中。 不是光秃秃的骨头,而是毛绒绒,很好用。 他们中有很多人,但我喜欢定居一个掌握它。 有什么build议么? 编辑:这是一个: https://github.com/benoitc/restkit 编辑: http : //pypi.python.org/pypi/requests就是这样。 编辑: http : //pypi.python.org/pypi/siesta是一样完美!
在REST的wiki文章中,指出如果您使用http://example.com/resources DELETE,则意味着您正在删除整个集合。 如果您使用http://example.com/resources/7HOU57Y DELETE,那意味着您正在删除该元素。 我正在做一个网站,请注意不要networking服务。 我有一个列表中的每个项目有一个checkbox。 一旦我select多个项目删除,我将允许用户按下一个名为DELETE SELECTION的button。 如果用户按下button,会popup一个js对话框,要求用户确认删除。 如果用户确认,所有的项目都被删除。 那么我应该如何应对以RESTFUL的方式删除多个项目? 注意,目前DELETE在网页中,我所做的是我使用POST作为操作的FORM标记,但包括_method的值DELETE,因为这是什么是由SO在其他人指出如何做RESTful删除网页 。
我正在玩Nodejs,并通过构build一个小的restAPI来expression。 我的问题是,设置代码状态以及响应数据的最佳做法/最佳方法是什么? 让我用一点代码解释一下(我不会把启动服务器所需的节点和expression式代码,只是所关心的路由器方法): router.get('/users/:id', function(req, res, next) { var user = users.getUserById(req.params.id); res.json(user); }); exports.getUserById = function(id) { for (var i = 0; i < users.length; i++) { if (users[i].id == id) return users[i]; } }; 下面的代码完美的工作,当发送邮递员的请求时,我得到以下结果: 正如你所看到的,状态显示200,这是OK的。 但这是做到这一点的最好方法吗? 有没有这样的情况,我应该自己设置状态,以及返回的JSON? 还是总是用快递处理? 例如,我刚做了一个快速testing,稍微修改了上面的get方法: router.get('/users/:id', function(req, res, next) { var user = users.getUserById(req.params.id); if (user == null […]
跨站点请求伪造(CSRF)通常通过以下方法之一进行阻止: 检查引用 – RESTful但不可靠 将令牌插入表单并将令牌存储在服务器会话中 – 不是真正的RESTful 神秘的一次性URIs – 与令牌相同的原因不是RESTful 手动为这个请求发送密码(不是与HTTPauthentication一起使用的caching密码) – RESTful但不方便 我的想法是使用用户秘密,一个神秘但静态的表单id和JavaScript来生成令牌。 <form method="POST" action="/someresource" id="7099879082361234103"> <input type="hidden" name="token" value="generateToken(…)"> … </form> GET /usersecret/john_doe由来自经过validation的用户的JavaScript获取。 回应: OK 89070135420357234586534346这个秘密在概念上是静态的,但可以每天/每小时更改…以提高安全性。 这是唯一的保密的事情。 阅读隐藏的(但静态为所有用户!)formsID与JavaScript,与用户密码一起处理: generateToken(7099879082361234103, 89070135420357234586534346) 将表单连同生成的令牌一起发送到服务器。 由于服务器知道用户密码和表单ID,因此可以在发送之前运行与客户端相同的generateToken函数,并比较两个结果。 只有当两个值相等时,动作才会被授权。 这种方法有什么问题,尽pipe它没有JavaScript不起作用。 附录: 无状态的CSRF保护
我的Android手机上的Shazam效果很好。 现在我正在寻找Shazam或类似服务的api。 该服务应占用歌曲的一小部分,并应返回歌曲的元数据。 (标题,艺术家)
你认为这两个库之间的优点和缺点是什么? 哪两个最适合生产环境? 顺便说一句,我将使用JSON而不是XML。 我也想知道什么图书馆最受社区支持,如教程,文档。
我开始用angularJS开发一个web应用程序,我不确定所有的东西都是正确的(客户端和服务器端)。 安全性基于单一login页面,如果凭证已选中,我的服务器将发回具有自定义时间有效性的唯一标记。 所有其他REST API都可以通过这个令牌访问。 应用程序(客户端)浏览我的入口点,例如: https : //www.example.com/home.html用户插入凭证并接收一个唯一标记。 这个唯一标记使用AES或其他安全技术存储在服务器数据库中,而不是以清晰的格式存储。 从现在开始,我的AngluarJS应用程序将使用此令牌对所有暴露的REST API进行身份validation。 我正在考虑在一个自定义的http cookie中临时存储令牌; 基本上,当服务器validation凭证时,它会发回一个新的Cookie Ex。 app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T 该cookie具有设置的安全和HTTP Only标志。 Http协议直接pipe理新的cookie并存储它。 连续的请求将呈现cookie的新参数,而不需要pipe理和存储它的JavaScript; 在每一个请求,服务器使令牌失效,并产生一个新的,并将其发送回客户端 – >防止单一令牌的重放攻击。 当客户端收到来自任何REST API的HTTP状态401未经授权的响应时,angular度控制器清除所有cookie并将用户redirect到login页面。 我应该考虑其他方面吗? 将令牌存储在新的cookie或localStorage中更好吗? 任何提示如何生成一个独特的强大的令牌? 编辑(改进): 我决定使用HMAC-SHA256作为会话令牌生成器,20分钟有效。 我生成一个随机的32字节的GUID,附加一个时间戳,并通过提供一个40字节的密钥来计算HASH-SHA256。 由于令牌有效性非常小,因此获得冲突是不可能的。 Cookie将具有域和path属性以增加安全性。 不允许多login。
我正在切换到Retrofit并试图理解使用asynchronouscallback的正确体系结构。 例如我有一个接口: interface RESTService{ @GET("/api/getusername") void getUserName(@Query("user_id") String userId, Callback<Response> callback); } 我从主要活动中运行: RestAdapter restAdapter = new RestAdapter.Builder() .setServer("WEBSITE_URL") .build(); RESTService api = restAdapter.create(RESTService.class); api.getUserName(userId, new Callback<Response> {…}); 然后用户旋转设备,我有新创build的活动…这里发生了什么? 我怎样才能得到新的活动的回应(我认为后台的api调用会比第一个活动的执行时间长)。 也许我必须使用callback的静态实例或什么? 请给我看看正确的方法
我的问题实际上是这个问题的后续。 @RestController public class TestController { @RequestMapping("/getString") public String getString() { return "Hello World"; } } 在上面的例子中,Spring会在响应主体中join“Hello World”。 我怎样才能返回一个string作为JSON响应? 我知道我可以添加引号,但是这更像是一个黑客。 请提供任何示例来帮助解释这个概念。 注意:我不想直接写入HTTP响应正文,我想以JSON格式返回string(我正在使用带有RestyGWT的控制器,要求响应采用有效的JSON格式)。
构build重置密码的RESTful资源的正确方法是什么? 这个资源是为那些遗失或忘记密码的人设置的密码重置器。 它使他们的旧密码无效,并通过电子邮件向他们发送密码。 我有两个select是: POST /reset_password/{user_name} 要么… POST /reset_password -Username passed through request body 我很确定这个请求应该是POST。 我不太确定我select了一个合适的名字。 而且我不确定是否应该通过URL或请求主体传递user_name。