まあ、あなたはこれを行うためにたくさんのPHPファイルを使用していません...だから、あなたは正しい方向に進んでいると思います=)。この記事の実装は問題ありませんが、非常に古いものです... 4 年以上前に書かれました。Zend_Soap_Server、Zend_Json_ServerまたはZend_Rest_Serverを調べることをお勧めします。私の意見では、石鹸ソリューションはモバイルには少し重いです。
実装を決定するだけで、計画はほとんど必要ありません。
私は Web アプリケーションを作成しましたが、アプリケーションにモバイル アプリ インターフェイスを追加するために、後でサービス レイヤーを追加する必要がありました。残念ながら、これは最初の要件の一部ではなかったため、多くのことをやり直す必要がありました。
私のアドバイスは次のとおりです (webapp と api が同じプロジェクトにある場合):
- すべてのアプリケーション ロジックをライブラリまたはコントローラー ヘルパーでコーディングします。したがって、メインの Web アプリケーションと API レイヤーで同じコードを再利用できます。
- デフォルト モジュールで webapp ロジックをコーディングする
- 「api」と呼ばれる専用モジュールで API レイヤーをコーディングします
- 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経由ですべてのリクエストを制限できます。
幸運を。