代码之家  ›  专栏  ›  技术社区  ›  Bluephlame

使用REST在PHP中生成对象

  •  4
  • Bluephlame  · 技术社区  · 17 年前

    我正试图决定对于我正在生成的一些面向web的函数,是应该使用REST服务还是SOAP服务。这个决定是基于我是否可以轻松地在实现中使用REST服务。我更喜欢使用REST,尽管我不想花上几天的时间用PHP编写对象模型。

    这些服务正在.NET中开发,但主要由PHP使用。

    基本上可以归结为一点:易于集成。在PHP中使用SOAP,我可以使用NuSOAP库,它将生成对象模型。

    然而,对于REST,我似乎找不到一种轻松生成该模型的方法,如果可能的话,我会使用REST服务,因为它们更易于记录和扩展,并且还具有JSON功能。

    我可以从XML文件/模式生成PHP中的对象模型,然后用REST服务序列化该文件/模式吗?

    7 回复  |  直到 17 年前
        1
  •  6
  •   Paul Tarjan    17 年前

    你甚至不必走课堂路线。只需使用simplexml摄取数据,然后像遍历对象一样遍历它。或者如果你有json, json_decode($data, TRUE) 将执行相同的操作(括号中没有属性)。

    $ch = curl_init("http://example.com/some/rest/endpoint");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $data = curl_exec($ch);
    
    $obj = simplexml_load_string($data);
    print $obj->some->data->you['need'];
    

    here

    <_>
     <some>
      <data>
       <you need="here" />
      </data>
     </some>
    </_>
    
        2
  •  0
  •   Bob Fanger    17 年前

    我在让SOAP在不同语言(PHP<>JAVA和PHP<>.NET)之间工作时遇到了一些问题

    如果你喜欢肥皂,你可能会想看看 WS-I (Web Services Interoperability)

        3
  •  0
  •   Darrel Miller    17 年前

    根据您描述的需求,您应该坚持使用SOAP。记住,REST只是构建分布式接口的一种风格。它没有说明该接口的功能是如何实现的。当然,不需要将模式映射到对象。

    话虽如此,如果您查看WCF REST初学者工具包中的客户机工具,您将发现将XML粘贴为CLR类型的功能。这将是基于XML实例文档创建可序列化类的最佳猜测。

    另外,从您描述的内容来看,ADO.NET数据服务将为您提供一种向PHP站点公开RESTful数据服务的快速方法。

    ....

        4
  •  0
  •   Cheeso    17 年前

    • 调查NuSOAP工具是否可以仅在XSD上使用。在.NET世界中,您有svcutil(或在ASMX时代的wsdl.exe)来消化.wsdl文件以生成代理类。但如果您只有.xsd文件,则可以使用xsd.exe工具或“售后市场” XsdObjectGen ,这就像一个增压的xsd.exe。NuSOAP中是否有类似的工具来执行相同的操作?也许这是显而易见的,你已经做到了。
        5
  •  0
  •   singpolyma    17 年前

    rest背后的全部思想是,您不会将其用于像SOAP一样的黑客“对象模型”。问题是您试图使用错误的系统:)

    如果需要对象模型,请使用SOAP。

        6
  •  0
  •   Ian McIntyre Silber    17 年前

        7
  •  0
  •   Bluephlame    17 年前

    所以我想这可能是我正在寻找的东西。但我想知道是否有某种自动化系统在那里为它

    http://devzone.zend.com/article/1713#Heading11

    以上例子都是 使用PHP4和domxml是可行的 扩展(只有API有一点 有点不同),扩展的能力 具有自己代码的DOM类是一个 PHP5的新特性。这就够了 可以编写更可读的代码。 这又是一个完整的例子, 重新编写以使用DOM文档 类别:

     class Articles extends DomDocument {
         function __construct() {
             //has to be called!
             parent::__construct();
         }
    
         function addArticle($title) {
             $item = $this->createElement("item");
             $titlespace = $this->createElement("title");
             $titletext = $this->createTextNode($title);
             $titlespace->appendChild($titletext);
             $item->appendChild($titlespace);
             $this->documentElement->appendChild($item);
         } } $dom = new Articles(); $dom->load("articles.xml");
     $dom->addArticle("XML in PHP5"); print
     $dom->save("newfile.xml");
    
    推荐文章