爆速フレームワークでrest apiを作った話

Post on 14-Apr-2017

3.087 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

今日は 2015年で一番印象に残った開発のお話をします。

爆速 PHPフレームワークでREST APIを作った話

泰昌平 @stai0823

自己紹介

泰昌平 ファンチーム株式会社 Webエンジニ

ア・平成生まれ・元システムエンジニア・ Java好きペチパー・フロントの javascriptが大好物・ダーツとバイクが好き

今年中頃の話・・・

ポータルサイト開発をしながら色々思うところがありました

業務レベルで新しい技術に挑戦したい

・自分で他言語を勉強しながら PHP案件

・ PHP自体は 5.3~ 5.6までやり込んだ

・ CakePHPが多め

開発リーダー陣にアピールはしていた

・自社サービスをやっているので、新たにサイトを作ったり、機能を提案して作れる環境。

・リーダーは技術に対してポジティブな方が多かった。→反面、リリースの速さを重視しているので、 FWや言語を変えるタイミングがなかった。

(このままだと CakePHPerになる)

と、思ってたら

ポイントシステムを作る事になった

・ポイントの付与、利用、期限管理の REST

API

・ポイントシステムの設計、開発は自分一人

ポイントシステムを作る事になった

・ポイントの付与、利用、期限管理の REST

API

・ポイントシステムの設計、開発は自分一人

・理由があればどんな言語、 FWでも良い

ポイントシステムを作る事になった

・ポイントの付与、利用、期限管理の REST

API

・ポイントシステムの設計、開発は自分一人

・理由があればどんな言語、 FWでも良い

・なる早でやってね

言語自由!!FW自由!!

言語・ FWの選定・ REST APIを作る→実装がシンプルなので FWが高機能すぎても微妙→今後は複数サイトで連携して使う可能性があるので、 それなりのリクエストを捌けるような言語・ FWが必要

・ポイントの付与、利用、期限管理をする→規模自体大きくはないので、全体の見通しを良くしたい→やはり高機能な FWは不要・・

言語・ FWの選定・保守性、拡張性→言語や FWのトラブルにも対応できるように、 フォーラムが活発なものにしたい。→他の開発者でもすぐ触れるよう、読みやすい FWにしたい

・なる早でやる→短納期の中、普段使っている言語以外に新しいものを入れるのは 学習コスト・リスクが高い

_人人人人人人人人人_ > 新しい言語は無理< ̄ Y^Y^Y^Y^Y^Y^Y^Y^ ̄

じゃあ FWはどうするのか

CodeIgnighter? Slim?Laravel?

Phalconに出会った

Phalconを選んだ理由

・他の FWを圧倒する速度・アプリの規模に合わせた構成を選べる・フォーラムが活発

スループット

メモリ使用量

構成も自由に選べる - SingleModule

構成も自由に選べる - MultiModule

構成も自由に選べる - Micro

フォーラムが活発

機能も充実している

・ ORM・ DI・ AutoLoader・ PHQL・ Filter・ ACL・ Forms Builder

・ Pagination・ Cache・ Security・ Cookies・ Validation・FlashMessages・TemplateEngine

などなど。。

REST APIを作るまでの流れ

導入 (Linux)1.Phalconモジュールをインストール

git clone git://github.com/phalcon/cphalcon.gitcd cphalcon/buildsudo ./install

2.「 php.ini」で読み込み

extension=phalcon.so

実装

・アプリケーションのメインとなるクラスを読み込む・規模に応じたクラスが用意されている・今回はMicroApplication(Microクラス )で実装・ DIやローダーで肉付けをしていく

実装 (Config)// Read the configuration$config = include __DIR__.'/../config/config.php';

// config.phpreturn new \Phalcon\Config(array(

'database' => array('adapter' => 'Mysql','host' => 'localhost','username' => 'root','password' => '','name' => 'test',

),'application' => array(

'modelsDir' => __DIR__ . '/../models/','baseUri' => '/api/',

)));

実装 (bootstrap)$di = new FactoryDefault();// Database connection is created based in the parameters defined in the configuration file$di->set('db', function() use ($config) {

return new Database(array("host" => $config->database->host,"username" => $config->database->username,"password" => $config->database->password,"dbname" => $config->database->name

));});// Registering an autoloader$loader = new Loader();$loader->registerDirs(

array($config->application->modelsDir

))->register();

実装 (API)$app = new Micro($di);// Retrieves all robots$app->get('/api/robots', function () use ($app) {

});// Retrieves robots based on primary key$app->get('/api/robots/{id:[0-9]+}', function ($id) use ($app) {

});// Adds a new robot$app->post(('/api/robots', function () use ($app) {

});// Updates robots based on primary key$app->put('/api/robots/{id:[0-9]+}', function ($id) use ($app) {

});// Deletes robots based on primary key$app->delete('/api/robots/{id:[0-9]+}', function ($id) use ($app) {

});$app->handle();

実装 (Model)$app->get('/api/robots', function () use ($app) { $robots = Robots::find(array( "conditions" => "type = ?1", "bind" => array(1 => "virtual") )); $data = array(); foreach ($robots as $robot) { $data[] = array( 'id' => $robot->id, 'name' => $robot->name ); } return $app->response->setJsonContent($data);});

ソース

・サンプルプロジェクトhttps://github.com/phalcon/mvc・マイクロアプリケーションhttps://docs.phalconphp.com/ja/latest/reference/micro.html・ REST APIチュートリアルhttps://docs.phalconphp.com/ja/latest/reference/tutorial-rest.html

最後に

Phalconを使ってみて

アプリ構成が自由なので、設計の幅が広がり楽しく開発ができた。必要な機能だけ読み込んで開発できたので可読性が高く、好評だった。ドキュメントやフォーラムが充実しているので、Phalconの機能でハマる事も少なかった。

Phalconを使ってみて

FWの縛りが少ない分、フリーダムに作り過ぎると大変な目に遭う。最近は増えてきたけれども、他の FWと比べると日本語の情報が若干少ないので、英語との戦いになることがある。

いかがでしたでしょうか?

機会があれば是非、Phalconを使ってみてください!

ご清聴ありがとうございました

良いお年を!

Credits

Special thanks to all the people who made and released these awesome resources for free:✘ Presentation template by

SlidesCarnival✘ Photographs by Unsplash

top related