Phalcon3でPhalcon\Mvc\Microクラスを使用してRESTful APIを作ってみる
公式のチュートリアルにあるようにREST APIを作成する場合はマイクロアプリケーションで作成してみます。
public\index.phpを以下のように書き換えます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
use Phalcon\Di\FactoryDefault; | |
use Phalcon\Mvc\Micro; | |
error_reporting(E_ALL); | |
define('BASE_PATH', dirname(__DIR__)); | |
define('APP_PATH', BASE_PATH . '/app'); | |
try { | |
$di = new FactoryDefault(); | |
include APP_PATH . '/config/router.php'; | |
include APP_PATH . '/config/services.php'; | |
$config = $di->getConfig(); | |
include APP_PATH . '/config/loader.php'; | |
// add start | |
$app = new Micro(); | |
$app->get( | |
'/api/robots', | |
function () { | |
// 実装 | |
} | |
); | |
$app->handle( | |
$_SERVER["REQUEST_URI"] | |
); | |
// add end | |
} catch (\Exception $e) { | |
echo $e->getMessage() . '<br>'; | |
echo '<pre>' . $e->getTraceAsString() . '</pre>'; | |
} |
use Phalcon\Mvc\Micro;
宣言するのを忘れないでください。
メソッドの対応は以下の通りです。
メソッド | HTTPメソッド |
---|---|
get | GET |
post | POST |
put | PUT |
delete | DELETE |
実装部分に返却するデータを書きます。
GETメソッド
getメソッドを使用してJSON形式でデータを返却してみます。
上記のindex.phpでいうfunction部分を実装するだけです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// add start | |
$app = new Micro(); | |
$app->get( | |
'/api/v2/getData', | |
function () { | |
$ret = [ | |
'name' => 'yamada', | |
'id' => 20 | |
]; | |
echo json_encode($ret); | |
} | |
); | |
$app->handle( | |
$_SERVER["REQUEST_URI"] | |
); | |
// add end |
function部でjson_encodeして返しているだけです。
http://localhost:8000/api/v2/getDataにGETメソッドでアクセスするとJSONが返ってきます。
POSTメソッド
HTTPのPOSTを使用したい場合はpostメソッドを使用します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// add start | |
$app = new Micro(); | |
$app->post( | |
'/api/v2/getData', | |
function () { | |
$ret = [ | |
'name' => 'yamada', | |
'id' => 20 | |
]; | |
echo json_encode($ret); | |
} | |
); | |
$app->handle( | |
$_SERVER["REQUEST_URI"] | |
); | |
// add end |
PUTメソッド
HTTPのPUTを使用したい場合はputメソッドを使用します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// add start | |
$app = new Micro(); | |
$app->put( | |
'/api/v2/getData', | |
function () { | |
$ret = [ | |
'name' => 'yamada', | |
'id' => 20 | |
]; | |
echo json_encode($ret); | |
} | |
); | |
$app->handle( | |
$_SERVER["REQUEST_URI"] | |
); | |
// add end |
DELETEメソッド
HTTPのDELETEを使用したい場合はdeleteメソッドを使用します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// add start | |
$app = new Micro(); | |
$app->delete( | |
'/api/v2/getData', | |
function () { | |
$ret = [ | |
'name' => 'yamada', | |
'id' => 20 | |
]; | |
echo json_encode($ret); | |
} | |
); | |
$app->handle( | |
$_SERVER["REQUEST_URI"] | |
); | |
// add end |
パスパラメータのバリデーション
Phalcon3では正規表現でパスパラメータのバリデートチェックをすることができます。
id | OK | NG | 意味 |
---|---|---|---|
{id:[0-9]+} | 123 | 123a | 数値のみ |
{id:[a-z]+} | abc | abc1 | 小文字アルファベットのみ |
{id:[0-9a-z]+} | 123abc | 123abcA | 数値と小文字アルファベットのみ |
{id:[0-9]{4,8}} | 1234 | 123 | 4文字以上8文字以下の数値のみ |
{id:[0-9]{4,}} | 123456789 | 123 | 4文字以上の数値のみ |
{id:[a-zA-Z]+} | abcA | Abc1 | 大文字小文字のアルファベットのみ |
今回はAPIの確認でしたが、次回はモデルを使ったデータベースにアクセスするAPIを作成したいと思います。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント