ネクストエンジンAPI - コントローラでAPIを使用する
ネクストエンジンAPI - コントローラでAPIを使用する
Section titled “ネクストエンジンAPI - コントローラでAPIを使用する”ここでは、コントローラで使用するためのネクストエンジンAPIクライアント、
Nextengine\Api\Client_Routerクラスについてご説明致します
このクラスは、APIのレスポンスによってエラー画面へリダイレクトさせることが主な役割です
そのため、Client_Routerというクラス名にしております
Client_Routerクラスは、fuel/packages/nextengine/classes/nextengine/api/client/router.phpに記述されています
また、このクラスはController_Neapiで使用されております
あわせてお読み下さい
Clientクラスとの相違点
Section titled “Clientクラスとの相違点”親クラスであるClientクラスとの相違点は、大きく分けて2点あります
1. failoverメソッドでリダイレクトする
Section titled “1. failoverメソッドでリダイレクトする”ネクストエンジンAPIからのレスポンスにエラーが含まれていると、例外がスローされます1
このとき、
- メイン機能もしくはネクストエンジンがメンテナンス中
- 受注の取り込み中やアクセスが集中している
- 料金未払いによる利用停止やシステムエラー
などのエラーだった場合には、該当するエラー画面へリダイレクトします
それぞれのエラー画面は、とても簡素なHTMLになっていますアプリに合わせてコーディングし直して下さい
それ以外のエラーだった場合には、キャッチした例外を再スローします
そのため、ネクストエンジンAPIクライアントを利用している際に、該当する例外が発生したら自動的にリダイレクトされます
protected function failover($code, $message) { // 親クラスがスローする例外をキャッチし、その詳細を解析する try { parent::failover($code, $message); } catch(NextengineApiException $e) { // NOTE: redirectはexitを実行するため、`break;`を書かないでも動作するが、 // redirectじゃない処理に変えた時に意図しないバグを防ぐためbreakを入れている switch($e->getCode()) { // メンテナンス中 => メンテナンス中です画面へリダイレクト case '002007': // 現在ネクストエンジンサーバーがメンテナンス中の為、再度時間を置いてからアクセスして下さい case '003004': // 現在メイン機能サーバーがメンテナンス中の為、再度時間を置いてからアクセスして下さい \Response::redirect('/error/maintenance'); break;
// 混み合ってます、受注取り込み中です => しばらく待ってアクセスして下さい画面へリダイレクト case '003001': // 現在メイン機能サーバーが混み合っております。再度時間を置いてからアクセスして下さい case '003002': // 現在メイン機能サーバーが混み合っております。再度時間を置いてからアクセスして下さい case '008003': // 受注取込中のため、更新できません case '008007': // 納品書印刷中の伝票があります時間を空けて再度APIを実行して下さい case '008010': // 棚卸中のため、更新できません \Response::redirect('/error/congestion'); break;
// 支払い等の理由で利用停止、システムエラー => 営業に問い合わせてねエラー画面へリダイレクト case '001007': // [xxxxx]様のネクストエンジンが、次の理由により利用停止になっています[xxxxx] case '002003': // [xxxxx]様のネクストエンジンが、次の理由により利用停止になっています[xxxxx] case '003003': // [xxxxx]様のメイン機能が、利用停止です case '999999': // APIサーバーのシステムエラーが発生しました \Response::redirect('/error'); break;
default: throw $e; } } }2. authenticateメソッド
Section titled “2. authenticateメソッド”Controller_Authクラスにて説明いたしました
authenticateメソッドはユーザのuidを引数に取り、
- ネクストエンジンAPIの認証処理
- 必要であれば、企業情報、ユーザ情報を作成しDBに保存
- ユーザモデルをネクストエンジンAPIクライアントのインスタンスにセット
という処理をします
具体的なコードは以下の通りです
/** * ユーザのuidを用いて認証する * DB < APIの順でコストが高く、APIを使用することはなるべく避けたい * そのため、まずDBを見てから、仕方ない場合のみAPIを叩く形にしている * FIXME: 戻り値で配列を使用しているため、ややオレオレ仕様になっている * * ```php * list($company, $user) = $client->authenticate($uid); * ``` * * @param string $uid ユーザのuid * @return array [Model_Company, Model_User]のインスタンスの配列listで受け取る想定 */ public function authenticate($uid) { // APIを1回は呼ばないと、アクセストークンとリフレッシュトークンが入手できない $company = $this->_createCompany(); $users = \Model_User::findBy('uid', $this->_uid);
// uidに対応するユーザがいる場合、そのまま利用する if(count($users) > 0) { $user = $users[0];
// uidに対応するユーザが居ない場合、APIを叩き認証する } else { // NOTE: fキー制約の都合でcompanyが先、elseと並び順が違うのは意図的 $user = $this->_createUser($company->id); }
$this->setUser($user); return array($company, $user); }内部で_createCompany, _createUserメソッドがコールされていますが、
どちらもAPIからレスポンスを取得しDBに情報を保存するユーティリティのため、詳細は割愛致します
Controller_Authに記述された認証処理を変更したい際には、ご参考にして下さい
- 2015/02/17: ネクストエンジンAPI - コントローラでAPIを使用するページ作成