SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
1/16
How to modularize
Pyramid/Cornice/Colander codes
株式会社ブレインパッド  中村 智洋
2/16
話すこと /about
●
プログラミングをしているとこのコードをどう構成して
いこうか、ともやもやすることがあると思うんですね。
今回の LT ではそのような場合について話せればいい
なと思っています。
●
I wanna talk how to modularize codes.
3/16
プロジェクトの全体像 /project loadmap
●
このプロジェクトというのはフロントエンドから受け
取ったパラメータに関して裏で計算して返してあげる。
こういった処理について、バックエンドは RESTful 風
な API を作成してあげようと。
●
I wanna to build RESTful like web service.
4/16
何故 Pyramid か /Why Pyramid
●
個人的に慣れていた Django にも REST framework
あるの知っていたんですが、社内で Pyramid のほうが
負荷の高い場合にスループットが良いと聞いたし、社内
で別のグループが利用している先行例もありましたので
Pyramid で組むことになりました。
●
Better throughput, use other group.
5/16
RESTfull API に関するアドオン選定 /addons
●
それでこの Pyramid の RESTfull API に関するアド
オンがあるだろう調べたところ Cornice( 読み : コー
ニス ) があったんですね。これは Pyramid 上の
REST framework となっています。
●
I wanna use Cornice that is A REST
framework for Pyramid.
6/16
Cornice と Colander について /About
Cornice and Colander.
●
それでこの Cornice 単体でバリデーションの仕組みも
ありますが、 Colander というバリデーション / デシ
リアライゼーションの Pyramid アドオンを利用するこ
ともできると。
●
The Cornice can use Colander.
7/16
それで /And
●
さらに、この Colander と Cornice を組み合わせる
と Colander のやり方で API のスキーマ定義を書けて
Sphinx といったドキュメント生成パッケージで API
定義も書き出せて便利そうだと。
●
When I use Cornice and Colander, I can define
API schema and use Sphinx.
8/16
それで /Then
●
じゃあ組もうといった際に最初にお話ししたような問題
が発生したんですね。
●
Then happen.
9/16
組み方
●
Cornice と Colander を組み合わせて組む場合は次の
ようにコントローラ処理と API スキーマ定義、そして
バリデーション定義を書きます。
●
When I use Cornice and Colander, I have to
code Control, API schema definition and
validation definition.
10/16
コード例 /code sample
import cornice, colander
hello = cornice.Service(name='hello', path='/', description='desc')
class HelloSchema(colander.MappingSchema):
foo = colander.SchemaNode(colander.String(), location="body", type='str')
def validate_foo_is_bar(request):
if request.validated['foo'] != 'bar':
request.errors.add('body', 'foo', 'foo is has to be bar')
@hello.post(schema=HelloSchema, validators=[validate_foo_is_bar])
def hello_post(request):
return {'Hello':request.validated['foo']}
11/16
複雑ではないかと /I feel messy.
●
しかし、これらを一つの views のファイルの中に書く
とごちゃごちゃしすぎるし、本来やりたいコントローラ
に類する処理をシンプルに書けないなと。困ったなと。
●
API のスキーマ定義、コントローラ処理、バリデー
ションの処理 3 つの処理をどうモジュール分けしよう
かと。
●
That’s very messy. What can I do?
12/16
複雑ではないかと
●
ただし、全部分けてしまうと、情報が離散しすぎると。
●
But When decoupling all, it’s too many files
to understand.
●
モジュール分割の例 /sample modules
– views.py
– schema.py
– validations.py
13/16
思案しどころ /How can I do?
●
さて、どうしましょうか。
●
T/O
14/16
結果として /Conclusion
●
悩んだ末、僕は API のスキーマ定義とコントローラの処理は同じ
views モジュールに記載し、バリデーションの処理は別モジュール
とすることにしました。
●
Then decouple two modules, that the API schema and
Controller module and the validation module.
●
モジュール分割の例 /sample modules
– views.py
●
API スキーマ定義とコントローラ処理を書く。
– validations.py
15/16
意図説明 /Why?
●
こう構成することで、 API のスキーマ定義とコントローラ処
理はスキーマに追加でどのようなパラメータが必要かコント
ローラのコードから読み取れますし、コントローラではフロ
ントエンドからどのようなパラメータが来るかスキーマ定義
から読み取ることができます。 1 モジュールで。
●
バリデーションの処理については、バリデーションの名前
(関数名)をわかりやすくすれば views モジュールで取り
回せるのでこういう構成としました。
●
I got control!
16/16
●
本日は個人的に Pyramid/Cornice/Colander を組み合
わせる際は API スキーマ定義とコントローラを一つのモ
ジュールに入れて、 validation については別モジュール
するのがほどよいのではないかといった話をしました。
●
個人的にこの構成で腑に落ちましたので、良かったです。
●
以上です。
●
That’s all for today.
終わり

Weitere ähnliche Inhalte

Was ist angesagt?

Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜x1 ichi
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fallビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo FallYusukeKuramata
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Tanaka Yuichi
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)hamaken
 
Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Tanaka Yuichi
 
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめBigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめTanaka Yuichi
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopTakashi Kambayashi
 
PythonでDeepLearningを始めるよ
PythonでDeepLearningを始めるよPythonでDeepLearningを始めるよ
PythonでDeepLearningを始めるよTanaka Yuichi
 
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法Tetsutaro Watanabe
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
SparkとJupyterNotebookを使った分析処理 [Html5 conference]SparkとJupyterNotebookを使った分析処理 [Html5 conference]
SparkとJupyterNotebookを使った分析処理 [Html5 conference]Tanaka Yuichi
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境yuichi_komatsu
 
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイントApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイントTanaka Yuichi
 
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)NTT DATA OSS Professional Services
 
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームApache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームKazutaka Tomita
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)NTT DATA OSS Professional Services
 

Was ist angesagt? (20)

Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fallビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
 
Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析Bluemixを使ったTwitter分析
Bluemixを使ったTwitter分析
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析Apache Sparkを使った感情極性分析
Apache Sparkを使った感情極性分析
 
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめBigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
 
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for HadoopAsakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
 
Apache Sparkの紹介
Apache Sparkの紹介Apache Sparkの紹介
Apache Sparkの紹介
 
PythonでDeepLearningを始めるよ
PythonでDeepLearningを始めるよPythonでDeepLearningを始めるよ
PythonでDeepLearningを始めるよ
 
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
 
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
はやわかりHadoop
はやわかりHadoopはやわかりHadoop
はやわかりHadoop
 
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
SparkとJupyterNotebookを使った分析処理 [Html5 conference]SparkとJupyterNotebookを使った分析処理 [Html5 conference]
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイントApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
ApacheSparkを中心としたOSSビッグデータ活用と導入時の検討ポイント
 
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
 
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォームApache cassandraと apache sparkで作るデータ解析プラットフォーム
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
 

Ähnlich wie How to modularize Pyramid/Cornice/Colander codes -- PyCon JP 2016 LT

MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編gree_tech
 
西区勉強会用スライド
西区勉強会用スライド西区勉強会用スライド
西区勉強会用スライドHiromi Kai
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)Takanori Sejima
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
デプロイに苦労した話
デプロイに苦労した話デプロイに苦労した話
デプロイに苦労した話tetuwo181
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱Yuya Rin
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Shunsuke Kikuchi
 
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみるCloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみるYASUKAZU NAGATOMI
 
WordPress 高速化 Pro Tips: フロントエンドの最適化
WordPress 高速化 Pro Tips: フロントエンドの最適化WordPress 高速化 Pro Tips: フロントエンドの最適化
WordPress 高速化 Pro Tips: フロントエンドの最適化masaaki komori
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみたkinneko
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodbRyuji Tamagawa
 

Ähnlich wie How to modularize Pyramid/Cornice/Colander codes -- PyCon JP 2016 LT (20)

MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPANSAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
西区勉強会用スライド
西区勉強会用スライド西区勉強会用スライド
西区勉強会用スライド
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
デプロイに苦労した話
デプロイに苦労した話デプロイに苦労した話
デプロイに苦労した話
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法
 
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみるCloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
 
WordPress 高速化 Pro Tips: フロントエンドの最適化
WordPress 高速化 Pro Tips: フロントエンドの最適化WordPress 高速化 Pro Tips: フロントエンドの最適化
WordPress 高速化 Pro Tips: フロントエンドの最適化
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみた
 
データベース勉強会 In 広島 mongodb
データベース勉強会 In 広島  mongodbデータベース勉強会 In 広島  mongodb
データベース勉強会 In 広島 mongodb
 

How to modularize Pyramid/Cornice/Colander codes -- PyCon JP 2016 LT