我正在开发一个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?
答案 0 :(得分:2)
AMF是Action Message Format,它只是一种以非常紧凑的二进制格式编码数据的方式。在任何严格意义上,AMF都与RPC无关。 Flex(消费者/生产者)中可用的消息传递功能使用AMF来编码所有消息的数据,这绝对不是RPC ..
回到你的问题:你用什么服务器端技术来构建你的应用程序?各种平台的AMF库都具有不同的质量和成熟度。大多数这些库应该允许您简单地传递要编码的对象,并接收可以写入与REST端点绑定的HTTP请求的输出流的字节数组。
答案 1 :(得分:2)
我目前正在使用AMF作为序列化格式的平台,与您提出的方式完全一样(在.Net平台上)。我们所做的是:
在客户端,我们使用格式设置为二进制的常规URLLoader。 loader.data属性将是一个ByteArray并使用ReadObject,您将获得序列化的DTO。如果使用[RemoteClass]元数据和registerClassAlias,您将获得相应的类型 - 否则您将获得具有一些动态属性的通用对象。
绕着类型化DTO绕行很酷的事情是我们可以使用常规的XML或JSON序列化器,使格式版本变得非常简单。
我还运行测试,将ByteArrays发布回服务器以进行创建/更新,它似乎工作正常。所以从本质上讲,您现在可以将AMF用于REST。
我也在考虑将它用于服务器到服务器的通信,因为它重量轻,并且对于序列化复杂类型似乎非常强大。
答案 2 :(得分:0)
回应Vineet Bhatia的问题: 你有没有检查过BlazeDS? http://opensource.adobe.com/wiki/display/blazeds/Overview
答案 3 :(得分:0)
呀,你可以做到,但你必须编写自己的AMF序列化器和反序列化器(只需复制Zend Framework中的一个)。或者你可以等我完成我的。我会尽量记住在这里发布。
答案 4 :(得分:-2)
AMF是一种RPC(远程过程调用)格式,与SOAP非常相似,但具有不同的目标受众。由于过程调用和对象之间存在根本区别,因此AMF 不将成为您的另一种输出格式。
您应该将AMF视为“Flex Remoting”,而不是使用REST API作为针对Flex的输出格式。
进行类比:您是否认为SOAP或XMLRPC只是REST API的另一种输出格式?