1

zend フレームワークは初めてで、サービスを提供する Web ポータルを作成したいと考えています。サービスは、Web アプリケーションとモバイル アプリケーションの両方で使用されます。クリス・ダニエルソンの記事を使用しています

http://www.chrisdanielson.com/2009/09/02/creating-a-php-rest-api-using-the-zend-framework/ ) のベースとして。

私の質問は、私は正しい方向に進んでいるということです 。現在、 http://www.zendrestexample.com/versionとしてサービスにアクセスしています。

1) http://www.zendrestexample.com/api/versionとして URL を使用する必要があります。

代わりは。

2) サービスを作成するために zend restserver を使用する必要がありますか?

3) モバイル アプリと Web アプリの両方に同じサービスを使用できますか?つまり、リダイレクトの問題が発生しますか?

4)これらのサービスを利用するには、zend rest クライアントを使用する必要がありますか?

助けてください..

4

1 に答える 1

2

まあ、あなたはこれを行うためにたくさんのPHPファイルを使用していません...だから、あなたは正しい方向に進んでいると思います=)。この記事の実装は問題ありませんが、非常に古いものです... 4 年以上前に書かれました。Zend_Soap_ServerZend_Json_ServerまたはZend_Rest_Serverを調べることをお勧めします。私の意見では、石鹸ソリューションはモバイルには少し重いです。

実装を決定するだけで、計画はほとんど必要ありません。


私は Web アプリケーションを作成しましたが、アプリケーションにモバイル アプリ インターフェイスを追加するために、後でサービス レイヤーを追加する必要がありました。残念ながら、これは最初の要件の一部ではなかったため、多くのことをやり直す必要がありました。

私のアドバイスは次のとおりです (webapp と api が同じプロジェクトにある場合):

  1. すべてのアプリケーション ロジックをライブラリまたはコントローラー ヘルパーでコーディングします。したがって、メインの Web アプリケーションと API レイヤーで同じコードを再利用できます。
  2. デフォルト モジュールで webapp ロジックをコーディングする
  3. 「api」と呼ばれる専用モジュールで API レイヤーをコーディングします
  4. zend が SMD を自動生成するには、phpdoc が完全である必要があります。

API が標準の JSON-RPC 2.0 プロトコルを使用する場合、これを利用して自動検出を提供する Android / iPhone の両方のクライアントがあります (WSDL のような json 用の SMD)。GET を介して送信されたすべての要求は、SMD が表示されます。他のすべての要求は、要求の処理になります。

API レイヤーにZend_Json_Serverを利用します。機能的な例を次に示します。

<?php

// API Controller Example
class ApiController extends Zend_Controller_Action
{

    public function init()
    {
        parent::init();
        $this->getHelper('ViewRenderer')->setNoRender();
    }

    public function helloWorldAction()
    {
        $this->_handleRequest('App_Api_HelloWorld');
    }

    protected function _handleRequest($handlerClassName)
    {
        //
        $this->getHelper('ViewRenderer')->setNoRender();

        //
        $server = new Zend_Json_Server();
        $server->setClass($handlerClassName);
        if ($_SERVER['REQUEST_METHOD'] == 'GET') {
            $cfg = Zend_Registry::get('config');
            $req = $this->getRequest();
            $reqUrl = $cfg->paths->basehref . $req->getControllerName() . '/' . $req->getActionName();

            $server->setTarget($reqUrl)
                    ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
            $smd = $server->getServiceMap();

            header('Content-Type: application/json');
            echo $smd;
        } else {

            //  handle request
            $server->handle();
        }
    }

}



// HANDLER Class Example

class App_Api_HelloWorld extends App_Api_ApiHandlerAbstract
{

    /**
     * says "hello world"
     * 
     * @return string
     */
    public function hello()
    {
        return 'hello world';
    }

    /**
     * says "hello $name"
     * 
     * @param string $name
     * @return string
     */
    public function hello2($name)
    {
        return "hello $name";
    }

    /**
     * 
     * @return string
     * @throws Exception
     */
    public function hello3()
    {

        throw new Zend_Json_Server_Exception('not allowed');
        return '';
    }

}

リクエストの例を次に示します (ID によるピックアップ セッションにブートストラップ マジックを追加しました)。

https://domain.com/api/hello-world
{
  "session_id": "4ggskr4fhe3lagf76b5tgaiu57",
  "method": "hello2",
  "params": { 
    "name" : "Alex"
  },
  "id": 123
}

JSON RPC 2.0 ドキュメントを確認してください。

JSON Web サービスの開発とテストには、Google Chrome のAdvanced REST Clientが最適な拡張機能であることがわかりました。

セキュリティを強化するために、抽象コントローラに数行のコードを追加するか、セキュリティコントローラ プラグインを作成することで、 HTTP Auth経由ですべてのリクエストを制限できます。

幸運を。

于 2013-10-31T20:55:34.130 に答える