Python のウェブフレームワーク「 Pyramid 」を使って API サーバーを作ってみよう!
みなさんは Python でウェブサーバーを構築する時に、どのようなフレームワークを使用されていますか?
Rails ライクの Django 、軽量フレームワークの Bottle や Flask など、大小様々な思想でフレームワークが開発されています。
今回は Pyramid と呼ばれるフレームワークを使用して、API サーバーを作成する方法をご紹介します!
Pyramid とは?
Pyramid は、小さいプロジェクトからスケールした大規模開発まで柔軟な設計ができるフレームワークです。
Python のウェブフレームワークの中では、いち早く Python3 に対応したことでも知られています。
コンポーネント思想で設計されており、様々なモジュール( Awesome Pyramid )が開発、提供されています。
Flask のように1ファイルから書ける手軽さと、モジュールを組み合わせることによって大規模開発にも対応できる設計はとても素晴らしいものだと感じています。
Pyramid で API サーバーを作る
環境構築
まずは環境構築をしていきましょう。
使用する環境としては以下となります。
- Python 2.7
- Pyramid 1.9.1
pip install pyramid
pip
で Pyramid をインストールすると、必要なライブラリが一緒にインストールされます。
今回は簡単な API サーバーを作っていきますので、他のモジュールはインストールしません。
Hello World!
まずは、よくあるお約束からです。
Pyramid を使用して「Hello World」を出力するようにしてみます。
# main.py
# coding: utf-8
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.view import view_config
@view_config(route_name='hello', renderer='string')
def hello_world(request):
return 'Hello World!'
if __name__ == '__main__':
config = Configurator()
config.add_route('hello', '/hello')
config.scan()
app = config.make_wsgi_app()
server = make_server('127.0.0.1', 8080, app)
server.serve_forever()
上記を main.py
に記述し、 python main.py
と実行して、
http://127.0.0.1:8080/hello にアクセスしてみて下さい。
無事、Hello World! が出力されたでしょうか?
今回は API サーバー構築のためテンプレートエンジンには触れませんが、よく Python で使用されるテンプレート言語として Flask で標準的に使われている jinja2 があります。
pyramid_jinja2 を使うことで Pyramid でも使用することができます。
レスポンスを JSON にしてみよう!
次に Pyramid からのレスポンスを JSON にして、API サーバーとして動作するように変更していきましょう。
@view_config(route_name='hello', renderer='json')
def hello_world(request):
return {'message': 'Hello World!'}
renderer
を string
から json
に変更し、return
する中身を dict
形式に変更します。
再度サーバーを立ち上げ先ほどの URL にアクセスすると、{"message": "Hello World!"}
が表示されていると思います。
レスポンスヘッダーも自動的に application/json
をセットしてくれています。
これだけで JSON をレスポンスにする API サーバーを立てることができました。
それでは、以下のデータを JSON で取得できるようにしていきます。
{
'john': {
'name': 'John Doe',
'age': 25,
'gender': 'male'
},
'jane': {
'name': 'Jane Smith',
'age': 28,
'gender': 'female'
}
}
ルーティングは、データ全体を取得する /persons
と、個別のデータを取得する /person/{name}
の2種類を作成してみましょう。
@view_config(route_name='person', renderer='json')
def show_person(request):
name = request.matchdict['name']
return Persons[name]
@view_config(route_name='persons', renderer='json')
def get_persons(request):
return Persons
if __name__ == '__main__':
config = Configurator()
config.add_route('person', '/person/{name}')
config.add_route('persons', '/persons')
config.scan()
app = config.make_wsgi_app()
server = make_server('127.0.0.1', 8080, app)
server.serve_forever()
main.py
を上記のように修正し、サーバーを再起動してみましょう。
http://127.0.0.1:8080/persons にアクセスすると全体のデータ、
http://127.0.0.1:8080/person/john にアクセスすると John のデータを取得することができます。
まとめ
今回は Pyramid を使った API サーバー構築をご紹介しました。
Bottle や Flask だとちょっと物足りない、だけど Django のようなフルスタックフレームワークは重いという方には、とてもおすすめなフレームワークです。
今回ご紹介したように1ファイルからでも始めることができますので、ぜひ皆さんも挑戦してみてはどうでしょうか。
-
お問い合わせ
SiTest の導入検討や
他社ツールとの違い・比較について
弊社のプロフェッショナルが
喜んでサポートいたします。 -
コンサルティング
ヒートマップの活用、ABテストの実施や
フォームの改善でお困りの方は、
弊社のプロフェッショナルが
コンサルティングいたします。
今すぐお気軽にご相談ください。
今すぐお気軽に
ご相談ください。
(平日 10:00~19:00)
今すぐお気軽に
ご相談ください。
0120-315-465
(平日 10:00~19:00)
グラッドキューブは
「ISMS認証」を取得しています。
認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業
「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。