Tag: rest

RESTful服务中的非CRUD操作

将非CRUD操作添加到RESTful服务的“RESTful”方式是什么? 说我有一个服务,允许CRUD访问这样的logging: GET /api/car/123 <- Returns information for the Car object with ID 123 POST /api/car <- Creates a new car (with properties in the request) PUT /api/car/123 <- Updates car 123 (with properties in the request) DELETE /api/car/123 <- Deletes car 123 POST /api/car/123/wheel/ <- Creates a wheel and associates it to car 123 […]

Django REST框架:向ModelSerializer添加额外的字段

我想要序列化一个模型,但想要包含一个额外的字段,需要在待实例化的模型实例上进行一些数据库查找: class FooSerializer(serializers.ModelSerializer): my_field = … # result of some database queries on the input Foo object class Meta: model = Foo fields = ('id', 'name', 'myfield') 什么是正确的方法来做到这一点? 我看到你可以传递额外的“上下文”到序列化程序,是正确的答案传递在上下文字典中的额外的领域? 采用这种方法,获取我所需要的字段的逻辑将不会与序列化程序定义自成一体,这是理想的,因为每个序列化的实例都需要my_field 。 在DRF序列化文件的其他地方,它说 “额外的字段可以对应任何属性或在模型上可调用”。 额外的领域我在说什么? 我应该在Foo的模型定义中定义一个返回my_field值的函数,而在序列化程序中,我将my_field连接到可调用的? 这是什么样子? 在此先感谢,如有必要,我们很乐意澄清这个问题。

那REST API真的是RPC吗? 罗伊·菲尔丁似乎认为如此

我认为我所知道的REST的大部分显然是错误的 – 我并不孤单。 这个问题有很长的导入,但似乎是必要的,因为信息有点分散。 如果你已经熟悉这个话题,最后的问题就来了。 从Roy Fielding的REST API的第一段必须是超文本驱动的 ,很清楚他相信他的工作正在被广泛的误解: 我感到沮丧的人调用任何基于HTTP的接口REST API的人数。 今天的例子是SocialSite REST API 。 这是RPC。 它尖叫着RPC。 显示器上有这么多的耦合,应该给它一个X等级。 Fielding继续列出REST API的几个属性。 他们中的一些人似乎不赞成SO和其他论坛的惯例和共同意见。 例如: 除了最初的URI(书签)和适合于目标受众的标准化媒体types(即预期被任何可能使用API​​的客户端所理解)的集合之外,REST API应该在没有任何先前知识的情况下被input。 … REST API不能定义固定的资源名称或层次结构(客户端和服务器明显的耦合)。 … REST API应该花费几乎所有的描述性努力来定义用于表示资源和驱动应用程序状态的媒体types,或者为现有标准媒体types定义扩展关系名称和/或启用超文本的标记。 … “超文本”的概念起着核心的作用 – 比URI结构或HTTP动词更重要。 “超文本”是在其中一个评论中定义的: 当我(Fielding)说超文本时,我的意思是同时呈现信息和控制,使得信息成为用户(或自动机)通过其获得select和select动作的可供件。 超媒体只是文本意味着在媒体stream中包含时间锚的扩展; 大多数研究者已经放弃了这一区分 超文本在浏览器上不需要是HTML。 机器在理解数据格式和关系types时可以遵循链接。 我猜在这一点上,但上面的前两点似乎表明,类似于以下的Foo资源的API文档导致客户端和服务器之间的紧密耦合,并且在RESTful系统中没有地位。 GET /foos/{id} # read a Foo POST /foos/{id} # create a Foo PUT /foos/{id} […]

REST微服务间的事务?

比方说,我们有一个用户,电子钱包REST微服务和一个粘合在一起的API网关。 当Bob在我们的网站上注册时,我们的API网关需要通过用户微服务和钱包通过钱包微服务来创build用户。 下面是一些情况可能出错的情况: 用户Bob创build失败:没关系,我们只是将错误消息返回给Bob。 我们正在使用SQL事务,所以没有人在系统中看到Bob。 一切都很好:) 用户Bob已创build,但在创build电子钱包之前,我们的API网关硬件崩溃。 我们现在有一个用户没有钱包(不一致的数据)。 用户Bob已创build,并且在我们创build电子钱包时,HTTP连接将断开。 钱包创build可能已经成功,或者可能没有成功。 有什么解决scheme可以防止这种数据不一致的发生? 是否有模式允许交易跨越多个REST请求? 我已经阅读了关于这个问题上的两阶段提交维基百科页面,但我不知道如何在实践中应用它。 这个primefaces分布式事务:一个RESTfuldevise文件也似乎很有趣,虽然我还没有读过它。 另外,我知道REST可能不适合这个用例。 也许正确的方法来处理这种情况,完全放弃REST,并使用不同的通信协议,如消息队列系统? 还是应该在应用程序代码中执行一致性(例如,通过检测不一致性并修复这些不一致的后台作业,或者通过在“用户”模型上使用“创build”值,“创build”值等)具有“状态”属性?

“render:nothing => true”返回空的纯文本文件?

我在Rails 2.3.3上,我需要build立一个链接发送一个post请求。 我有一个看起来像这样的: =link_to( 'Resend Email', {:controller => 'account', :action => 'resend_confirm_email' }, {:method => :post} ) 哪个在链接上产生适当的JavaScript行为: <a href="/account/resend_confirm_email" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'EL9GYgLL6kdT/eIAzBritmB2OVZEXGRytPv3lcCdGhs='); f.appendChild(s);f.submit();return false;">Resend Email</a>' 我的控制器操作正在工作,并设置为什么都不渲染: respond_to do |format| format.all { render :nothing => […]

最好/最全面的股票/财务数据API

访问金融市场统计数据和股票报价(最好是实时报价)最受推荐的免费/公共API是什么? 我不太挑剔它是如何暴露的(SOAP,REST,一些专有的XML设置等),只要它有一些不错的文档。 我打算用一些基本的数据(基本上是一个快速的肮脏的主页)在PHP中构build一个简单的Web仪表板,但最终可能会把它变成一个完整的Web应用程序。 有什么想法吗? 正如我find一些,我会在这里发布一个列表(如果你以前使用过任何一个,请随时发表评论): 自由 opentick ( 女高音 )//链接不起作用 不是免费的 XigniteRealTime

使用python向RESTful API发出请求

我有一个RESTful API,使用EC2实例上的Elasticsearch实现来公开一个内容语料库。 我可以通过从我的terminal(MacOSX)运行以下命令来查询search: curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{ "query": { "bool": { "must": [ { "text": { "record.document": "SOME_JOURNAL" } }, { "text": { "record.articleTitle": "farmers" } } ], "must_not": [], "should": [] } }, "from": 0, "size": 50, "sort": [], "facets": {} }' 如何使用python/requests或python/urllib2 (不知道哪一个去 – 使用urllib2,但是听到请求更好…),将上面的代码变成API请求? 作为标题或其他方式传递吗?

我怎样才能打破外部循环与PHP?

我期待在PHP中打破/ foreach循环。 这可以在ActionScript中完成,如下所示: top : for each(var i:MovieClip in movieClipArray) { for each(var j:String in nameArray) { if(i.name == j) break top; } } 什么是PHP的等价物?

REST风格的Web服务 – 如何authentication来自其他服务的请求?

我正在devise一个需要被用户访问的REST风格的Web服务,也包括其他Web服务和应用程序。 所有传入的请求都需要进行身份validation。 所有通信都通过HTTPS进行。 用户authentication将基于通过将用户名和密码(通过SSL连接)发布到由服务提供的/会话资源而获取的authentication令牌来工作。 在Web服务客户端的情况下,在客户端服务之后没有最终用户 。 这些请求由计划的任务,事件或一些其他计算机操作启动。 连接服务列表事先已知(显然,我猜)。 我应该如何validation来自其他(networking)服务的这些请求? 我希望validation过程尽可能容易地实现这些服务,但不以安全为代价。 这样的场景的标准和最佳实践是什么? 我可以想到的选项(或者已经向我build议): 让客户端服务使用“假”用户名和密码,并以与用户相同的方式对其进行身份validation。 我不喜欢这个选项 – 只是觉得不对。 为客户端服务分配永久的应用程序ID,也可能是应用程序密钥。 据我了解,这是有相同的用户名+密码。 有了这个ID和密钥,我可以对每个请求进行身份validation,或者创build一个身份validation令牌来validation进一步的请求。 无论哪种方式,我不喜欢这个选项,因为任何能够获得应用程序ID和密钥的人都可以模拟客户端。 我可以添加一个IP地址检查到以前的选项。 这将使得执行虚假请求变得更困难。 客户端证书。 设置我自己的证书颁发机构,创build根证书,并为客户机服务创build客户机证书。 但是,有几个问题想到:a)如何仍然允许用户在没有证书的情况下进行身份validation; b)从客户端服务的angular度来看,这种情况有多复杂? 还有其他的东西 – 那里必须有其他的解决scheme吗? 我的服务将运行在Java上,但是我特意留下了关于它将构build的具体框架的信息,因为我对基本原则更感兴趣,而不是更多地关注实现细节 – 我认为这是最好的解决scheme无论底层框架如何,都可以实现。 不过,我对这个主题有点不熟悉,所以对于实际实现(如有用的第三方库,文章等)的具体提示和例子也将非常感激。

WSDL与REST的优点和缺点

有关: 为什么会使用REST而不是Web服务? 在决定是否使用SOAP或REST(我的意思是HTTP / XML以REST方式)实现一个Web服务时,我应该注意什么,我该怎么想? 我认为这不是一个大小适合所有的事情,所以我该如何select使用。