メニューボタン閉じるボタン

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!'}

rendererstring から 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ファイルからでも始めることができますので、ぜひ皆さんも挑戦してみてはどうでしょうか。

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】