3

我正在开发一个 RESTish 服务器项目,该项目以各种格式响应 HTTP 请求。这使我们能够编写面向用户的应用程序并检索当时看起来最方便的格式。例如,要查看是否有用户登录,我们可以发送:

http://serverurl/Authentication?command=whoami&format=xml

可以想象,这将返回包含有关登录用户(如果有)的信息的 XML。我们可以在 json 中得到相同的信息:

http://serverurl/Authentication?command=whoami&format=json

最近,我们一直在讨论添加对 yaml 的支持,因为它在一些 ruby​​ 和 python 开发人员中很受欢迎。同时,我们一直在谈论在 Flex 中编写原型客户端应用程序(如果您无法从我的问题中看出,那将是我们第一次涉足 Flex 开发)。我确实知道我们可以使用我们现有的格式之一与 Flex 应用程序进行通信,但是如果我们决定“仅仅因为我们可以”添加对这些额外格式的支持,那么使用 amf 是否会变得特别困难或不同于输出xml还是json?

4

5 回答 5

2

AMF 是动作消息格式,它只是一种以非常紧凑的二进制格式编码数据的方式。AMF 在任何严格意义上都与 RPC 无关。Flex(消费者/生产者)中可用的消息传递功能使用 AMF 对所有消息的数据进行编码,这绝对不是 RPC..

回到您的问题:您使用什么服务器端技术来构建您的应用程序?各种平台的 AMF 库都具有不同的质量和成熟度。大多数这些库应该允许您简单地传递要编码的对象并接收字节数组,您可以将其写入与 REST 端点相关联的 HTTP 请求的输出流。

于 2009-03-26T06:40:46.033 回答
2

我目前正在使用 AMF 作为序列化格式的平台,完全按照您提出的方式(在 .Net 平台上)工作。我们所做的是:

  1. 创建一个代表您要发送的页面的 DTO。
  2. 使用 WriteObject() 创建一个 ByteArray 并在其中存储 DTO
  3. 将内容类型更改为 AMF
  4. 将 ByteArray 的 Buffer 二进制写入 Response 流

在客户端,我们使用格式设置为二进制的常规 URLLoader。loader.data 属性将是一个 ByteArray 并使用 ReadObject,您将获得序列化的 DTO。如果您使用 [RemoteClass] 元数据和 registerClassAlias,您将获得相应的类型 - 否则您将获得具有一些动态属性的通用对象。

绕过类型化 DTO 的一个很酷的事情是,我们可以在其上使用常规的 XML 或 JSON 序列化程序,从而使格式版本控制非常简单。

我还运行测试,将 ByteArrays 发布回服务器以进行创建/更新,它似乎工作正常。所以本质上,您现在可以将 AMF 用于 REST。

我也在考虑将它用于服务器到服务器的通信,因为它重量轻,并且对于序列化复杂类型似乎非常健壮。

于 2009-08-27T10:27:37.250 回答
0

回答 Vineet Bhatia 的问题:你检查过 BlazeDS 吗?http://opensource.adobe.com/wiki/display/blazeds/Overview

于 2009-05-29T14:59:54.950 回答
0

是的,你可以做到,但你必须编写自己的 AMF 序列化器和反序列化器(只需复制 Zend Framework 中的那个)。或者你可以等我完成我的。我会尽量记住把它贴在这里。

于 2009-08-15T04:53:50.073 回答
-2

AMF 是一种 RPC(远程过程调用)格式,与 SOAP 非常相似,但具有不同的目标受众。由于过程调用和对象之间存在根本区别,因此 AMF不会只是您的另一种输出格式。

您可能应该将 AMF 视为“Flex Remoting”,而不是针对使用您的 REST API 的 Flex 的输出格式。

打个比方:您是否认为 SOAP 或 XMLRPC 只是 REST API 的另一种输出格式?

于 2009-03-23T21:21:18.967 回答