编写REST API包装器的指南

26

我写了一些非常基础的REST和较少结构化的web界面包装器,但都是为了好玩而已,很少关注错误检测和处理、超时等方面。

请问有人能给我一些指导,无论是实践还是资源,来开发一个坚实、专业的.NET(或其他平台)REST API包装器?

我考虑的一些事情包括:

  1. 解释HTTP错误代码,并从API错误中筛选出协议错误。
  2. 基于URL构建请求,可能带有模式匹配和令牌替换。
  3. 将post-backs与请求进行匹配。
  4. 如何将OO模型映射到REST模型。 一些请求适用于静态方法,例如获取列表,而其他请求则处于静态和实例之间的中间状态,也许是具有所有静态方法的简单提供程序模式?

新的:我后来发现这篇关于如何调用Yahoo REST的指南几乎太基础了,但它作为一个起点。

重要提示: 处理REST API上的表单身份验证的一个非常复杂且很少涉及的方面是如何处理分离的登录请求、cookie存储等。


非常好的问题。我刚想问一个非常类似的问题。如果你把这个问题与语言无关呢? - markus
我刚刚完成了,除了提到我偏爱.NET。好主意。 - ProfK
好的,太棒了!我添加了语言无关标签,以吸引更多读者(希望如此)。我认为同时拥有 .net 标签和无关标签是可以的。这意味着这是一个通用问题,但稍微偏向于你的 .net 情况。希望这对你没问题。 - markus
老实说,我不确定这是否是与语言无关的(或者更准确地说,我认为它不是与框架无关的)。不同的框架有非常不同的设计指南 - 比如,一个用于 Python 的包装器与一个用于 C# / VB 的包装器会非常不同。 - Greg Beech
2
这并不是那么简单的事情 - 它使用表单身份验证,你会为每个操作都执行整个HttpWebRequest流程吗? - ProfK
显示剩余6条评论
1个回答

7
尽管我已经以面向对象的方式封装了无数个网络服务,但我发现很难给你一个好的答案。
这里可以找到一些Yahoo API示例:http://curlobjects.com/trac/browser/trunk/lib/YahooApi 1. 解释HTTP错误代码并从API错误中过滤协议错误。
我的基础http类有一个可以被覆盖的http错误回调函数。
2. 构建基于URL的请求,可能需要模式匹配和令牌替换。
我更喜欢使用字符串拼接。
4. 如何将OO模型映射到REST模型。一些请求适合静态方法,例如获取列表,而其他请求则介于静态方法和实例之间,可能是一个简单的提供者模式,包含所有静态方法。
有时您需要一个大的静态工厂/提供者,有时您想为每种方法创建一个类,有时您想为每组相关方法创建一个类...真的没有一种正确的方法来处理这个问题。我总是花一些时间来了解服务的结构,然后尝试找到一个优雅的方法来抽象重复的部分。
如果您对登录表单、cookie等有任何更具体的问题,我很乐意回答。
编辑:
提到了HttpWebRequest,我猜您要么需要设置ClientCertificate属性并正确使用SSL,要么可以使用CertificatePolicy忽略所有SLL错误

请尝试。当我执行一个API GET请求的示例时,响应体返回一个登录表单HTML,并且提交到一个HTTPS地址。如果我将其更改为虚拟HTTP地址,则表单可以正常提交。关于HTTPS登录请求,我需要做什么?我认为在此之后我会得到我的“黄金cookie”。 - ProfK
你在发送HTTP请求时使用了什么?你可能需要设置一些额外的选项来处理HTTPS。 - bhseo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接