- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于实现严格遵守 REST 架构原则的数据访问客户端的似乎相当简单的问题。首先,假设我有一个运行良好的 REST API,我想使用 Django 应用程序来使用它。我将首先了解哪些服务可用(为后续内容进行编辑):
GET example.com/services/ HTTP/1.1
HTTP/1.1 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<services>
<service>
<name>Widgets</name>
<link>http://example.com/services/widgets/</link>
<item_link>http://example.com/services/widgets/{widget_id}/</item_link>
</service>
<service>
<name>Factories</name>
<link>http://example.com/services/factories/</link>
<item_link>http://example.com/services/factories/{factory_id}/</item_link>
</service>
...
</services>
现在,由于我正在构建一个基于使用此 API 的 Django 应用程序,我将如何继续以 REST 方式继续探索这些服务?为了遵守 REST 原则,我的应用程序必须由接收到的超媒体驱动。我想第一步很简单——通过给定的名称与服务交互。我设置了一个 Django View ,如下所示:
def get_service(request, service_name):
doc = etree.parse(urllib.urlopen('http://example.com/services/'))
uri = doc.xpath("service/name[.='%s']/following-sibling::*" % service_name)[0].text
...
我将从中执行另一个请求(为后续进行编辑):
GET example.com/services/widgets/ HTTP/1.1
HTTP/1.1 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<widgets>
<item_link>http://example.com/services/widgets/{widget_id}/</item_link>
<widget>
<id>1</id>
<name>Whizbang Foobar</name>
<link>http://example.com/services/widgets/1</link>
</widget>
...
</widgets>
现在我将在渲染的 Django 模板中显示一个简单的小部件列表。但从这里开始,我如何继续以 REST方式与该服务交互?也许我已经把自己搞糊涂了,但我能想到的唯一合理的事情就是实现大量的应用程序 View 或瘦Django 数据模型来持久保存服务URI。
我主要担心的是,如果不严格遵守 REST 架构准则,这是微不足道的,但我觉得我在尝试这样做时完全错过了机会。我知道设计正确的 REST API 和客户端并不“容易”,但我似乎迫切需要一个类似的示例来完成实际的实现。
对于这个问题的冗长和冗长以及不可避免的枯萎读者的捂脸,我深表歉意。
后续:
以下是实现这些交互的有效方法(使用 URI 模板)吗?出于演示目的(代替更抽象的实现),另一个 Django View 用于检索资源集合项:
def get_item(request, service_name, item_id):
doc = etree.parse(urllib.urlopen('http://example.com/services/'))
uri = doc.xpath("service/name[.='%s']/following-sibling::item_link" % service_name)[0].text
...
然后是后续请求:
GET example.com/services/widgets/1 HTTP/1.1
HTTP/1.1 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<widget>
<id>1</id>
<name>Whizbang Foobar</name>
<tags>foo bar baz ham eggs</tags>
<index_link>http://example.com/services/widgets/</index_link>
</widget>
最佳答案
My main concern boils down to that this is trivial to do without strictly adhering to REST architectural guidelines, but I feel like I've missed the boat completely in trying to do so. I understand designing proper REST APIs and clients isn't "easy", but it seems that I'm in dire need of a similar example to work through the actual implementation.
我能找到的最好的例子是 Sun Cloud API 。大多数文档描述了系统使用的各种媒体类型,这似乎是实现此类事情的关键。
我发现在开发 API 的同时编写客户端会很有帮助。这样您就可以立即发现可能导致您的 API 编码困难的因素并解决问题。
这并不容易。如果您遵循 HATEOAS 约束得出其逻辑结论,您定义的每种媒体类型都将由一系列客户端之一处理。如果您可以使所有资源遵循类似的行为模式,那么您编写客户端的工作就会变得更加容易。
例如,您可以定义一个媒体类型“索引”,仅列出相关资源。索引定义用于分页、获取列表中的项目、按名称查找项目等的链接。
然后,您可以定义一个名为“Item”的基本媒体类型。 Item 有一个链接,用于显示其父 Index、更新/删除自身等。然后,您的资源 Widget 可以由两种不同的媒体类型表示 - 一种是 Index,另一种是基于 Item。
您可以首先实现一个处理 Index 媒体类型的类。然后,您可以编写一个基类来处理所有常见的 Item 媒体类型行为。最后,您可以编写一个 Widget 客户端来处理所有特定于 widget 的行为并扩展 Item 客户端。这些客户端可以按照其编写语言的惯用方式公开其功能(更多链接和数据字段的可用性)。
处理来自服务器的响应只需将响应的 MIME 类型与您编写的客户端之一进行匹配即可。
换句话说,即使您的服务的客户端作为一个整体将由许多范围有限的客户端组成,但它们每个都将基于共同的行为,因此可以以 DRY 方式实现。
关于django - 表现良好的 RESTful 客户端交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225701/
我正在用 C++ 开发一个程序,我必须实现一个 cron。由于不同的原因,这个 cron 应该每小时和每 24 小时执行一次。我的第一个想法是创建一个独立的 pthread 并在每次 1h 内休眠。这
我需要向同一场景几何添加多个体素(立方体等于),但每个体素具有不同的纹理。 我的体素超过 500 个,导致性能出现严重错误。 这是我的代码: texture = crearTextura(voxel.
对于 MySQL 数据库,我有 2 个场景,我不确定该选择哪一个,并且对于一些表我也遇到了同样的困境。 我正在制作一个仅供成员(member)访问的网络应用程序。每个成员都有自己的交易、费用和“列表”
我想知道一个简单的事情: 当设置一个被所有 child 继承的样式时,是否建议最具体? Structure: html > body > parent_content > wrapper > p 我想
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
这些天我正在阅读有关 JPA 的内容。我了解到可以在 JPQL 中使用 explicit 或 implicit JOIN。 显式加入 em.createQuery(“SELECT b.title, p
我有一种情况需要连接几个字符串以形成一个类的 id。基本上,我只是在列表中循环以获取对象的 ToString 值,然后将它们连接起来。 foreach (MyObject o in myList)
我正在检查我的游戏在拖尾效果下的性能会降低多少。但我注意到每秒的操作次数更多了。这怎么可能? 这是怎么回事... context.fillRect(0, 0, 500, 500); // cl
如果我可以选择使用全局变量或传递变量,哪个选项在速度和内存使用方面更好? // global variable function func(){ global $var; echo $var;
我有一个类似这样的表“tbl”:ID bigint(20) - 主键,自增字段1字段2字段3 该表有 60 万多行。 查询:SELECT * from tbl ORDER by ID LIMIT 60
谁能告诉我,我如何比较 TSP 最优和启发式算法?我已经实现了 TSP,但不知道如何比较它们。事实上,我怎样才能找到 TSP 的最优成本?有什么方法或猜测吗? 谢谢 最佳答案 用众所周知的基准实例检查
我有一个 NSTextStorage里面有长文本(比如一本书有 500 页,当前字体在设备上超过 9000 页)。我以这种方式为 textcontainer 分发此文本: let textStorag
我有一个根据邮政编码搜索项目的应用程序。 在搜索邮政编码时,我返回了来自该城市/社区的所有产品(通过解析邮政编码完成)。 我现在需要根据与原始邮政编码的距离对这些产品进行分类。 我将纬度/经度存储在数
我有许多进程(大约100到1000个进程),每个进程都必须向其他进程(例如大约10个)发送一些数据。 (通常,但不一定总是这样,如果A发送给B,B也发送给A。)每个进程都知道必须从哪个进程接收多少数据
我知道无状态组件使用起来更舒服(在特定场景下),但是既然你不能使用shouldComponentUpdate,这是否意味着组件将在每次props更改时重新渲染?我的问题是,使用带有智能 shouldC
我正在研究 Google Pagespeed 的加速页面加载时间指南列表。其中之一是缩小 CSS 和 JS 文件。 由于这些文件经常更改,我正在考虑使用 PHP 脚本根据请求(来自浏览器)即时缩小此脚
我正在尝试从下表构建 SQL 查询(示例): Example of table with name "performances" 这是带有运动表现的表格。我想从这个表中选择每个学科和一组一个或多个类别
假设我们有一个字符串 var "sA",我想检查字符串 "123"是否在 sA 的末尾。 什么更好,为什么: if(sA.length() > 2) sA.substr(sA.length()-3)
关于受这篇文章启发的可参数化查询 LINQ group by property as a parameter我获得了一个很好的参数化查询,但在性能上有一个缺点。 public static void
| 和| 之间有什么主要区别吗?和 + 从长远来看会影响代码的性能吗?或者都是 O(1)?我正在使用的代码是这样的: uint64_t dostuff(uint64_t a,uint64_t b){
我是一名优秀的程序员,十分优秀!