41
今今今 2015 今今 今今今今今今今 今今今今今今今今今

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

Embed Size (px)

Citation preview

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

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

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

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

泰昌平 @stai0823

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

自己紹介

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

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

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

今年中頃の話・・・

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

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

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

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

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

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

・ CakePHPが多め

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

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

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

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

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

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

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

と、思ってたら

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

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

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

API

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

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

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

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

API

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

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

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

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

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

API

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

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

・なる早でやってね

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

言語自由!!FW自由!!

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

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

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

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

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

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

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

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

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

じゃあ FWはどうするのか

CodeIgnighter? Slim?Laravel?

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

Phalconに出会った

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

Phalconを選んだ理由

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

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

スループット

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

メモリ使用量

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

構成も自由に選べる - SingleModule

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

構成も自由に選べる - MultiModule

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

構成も自由に選べる - Micro

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

フォーラムが活発

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

機能も充実している

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

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

などなど。。

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

REST APIを作るまでの流れ

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

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

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

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

extension=phalcon.so

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

実装

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

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

実装 (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/',

)));

Page 31: 爆速フレームワークでREST 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();

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

実装 (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();

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

実装 (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);});

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

ソース

・サンプルプロジェクト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

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

最後に

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

Phalconを使ってみて

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

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

Phalconを使ってみて

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

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

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

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

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

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

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

良いお年を!

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

Credits

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

SlidesCarnival✘ Photographs by Unsplash