1. ホーム
  2. 記事一覧
  3. Fast APIでREST APIを作ってみよう 初心者でも簡単にできる環境構築から解説

2024.03.26

Fast APIでREST APIを作ってみよう 初心者でも簡単にできる環境構築から解説

Pythonで手軽にアプリを作りたいとき、FlaskとFastAPIという2つのフレームワークが選択肢として挙げられます。Flaskは、軽量で使いやすく、マイクロサービス開発に適しています。一方、FastAPIは、高速でモダンなフレームワークであり、大規模なAPI開発に適しています。今回のハンズオンでは、FastAPIを使って簡単なREST APIを作成します。

FastAPIとは

FastAPIは、Pythonで非同期WebアプリケーションおよびAPIを開発するための高速なWebフレームワークです。Starlette(ASGIアプリケーションとして機能するための軽量HTTPサーバー)とPydantic(データ検証と設定管理を簡素化するライブラリ)の上に構築されています。これにより、FastAPIは高いパフォーマンスを発揮し、非同期プログラミングをフルに活用して、大量のリクエストを効率的に処理できるようになります。簡潔な構文を用いて、RESTful APIを短時間で開発できるため、開発者がより迅速にアプリケーションを市場に投入できるよう支援します。

FastAPIの特徴

高速性

FastAPIは、Pythonフレームワークの中で最高レベルのパフォーマンスを提供します。非同期I/O処理により、I/O操作がブロッキングされることなく、複数のリクエストを並行して処理できます。

簡易性

開発者が直感的に理解しやすい構文を提供し、少ないコードで多くの機能を実装できます。これにより、学習曲線を緩和し、開発速度を向上させます。

自動ドキュメント生成

FastAPIは、OpenAPI(旧Swagger)とJSON Schemaを使用して、APIのドキュメントを自動生成します。これにより、APIのテストやフロントエンド開発者との連携が容易になります。

型ヒントと自動データ検証

Python 3.6+の型ヒントをフルに活用して、リクエストとレスポンスのデータ構造を定義します。これにより、実行時にデータ検証が自動的に行われ、エラーを早期に発見できるようになります。

FastAPIのインストール

ここではインストールの概要を説明します。次の章で環境構築を詳しく説明します。 FastAPIをインストールするには、まずPython 3.6以上がインストールされていることを確認してください。その上で、以下のコマンドを使用して、FastAPIとASGIサーバーであるUVicornをインストールします。UVicornは、FastAPIアプリケーションを実行するために必要な非同期サーバーゲートウェイインターフェース(ASGI)サーバーです。

# pythonのバージョンを調べる
python3 --version
# FastAPIのインストールコマンド
pip install fastapi[all]

または、最小限の依存関係でFastAPIをインストールしたい場合は、次のコマンドを使用して、別途UVicornをインストールできます。

pip install fastapi
pip install "uvicorn[standard]"

これで、FastAPIを使用して、非同期WebアプリケーションやAPIの開発を開始できます。

Fast APIの環境構築

環境構築とは、プログラミングで何かを作る前に、必要な道具を揃えて、使える状態にすることです。例えるとすれば料理を始める前に、食材や調理器具を準備し、キッチンを整えるようなものです。

環境構築は、どのような開発プロジェクトを始めるにあたっても最初の重要なステップです。このセクションでは、FastAPIでのWebアプリケーション開発に必要な環境構築の手順を紹介します。

Pythonのインストール

  1. 公式サイトへのアクセス

    まず、Pythonの公式サイトにアクセスします。

  2. インストール

    「Downloads」セクションから、お使いのオペレーティングシステム(Windows、macOS、Linux/UNIX)に適したPythonの最新版をダウンロードしてください。

  3. インストールプロセスの実行

    ダウンロードしたインストーラーを開き、画面の指示に従ってインストールを進めます。「Add Python to PATH」オプションを選択することをお勧めします。これにより、コマンドラインやターミナルからPythonを直接起動できるようになります。

仮想環境の作成

Pythonプロジェクトで仮想環境を使用すると、プロジェクトごとに異なる依存関係を管理できるため、開発が格段に便利になります。venvはPythonに組み込まれている仮想環境作成ツールです。

  1. 仮想環境の作成

    ターミナルまたはコマンドプロンプトを開き、プロジェクトディレクトリに移動してから、以下のコマンドを実行します。

    # プロジェクトディレクトリ作成
    mkdir fast-api-handson
    # プロジェクトディレクトリに移動
    cd fast-api-handson
    # 仮想環境を作成
    python -m venv venv

    これにより、venvという名前の仮想環境が作成されます。

  2. 仮想環境の活性化

    • Windowsの場合
      .\venv\Scripts\activate
    • macOSやLinuxの場合
      source venv/bin/activate

    仮想環境が活性化されると、プロンプトに仮想環境の名前が表示されます。

FastAPIのインストール

仮想環境が活性化された状態で、以下のコマンドを使用してFastAPIとUVicornをインストールします。UVicornは、FastAPIアプリケーションを実行するためのASGIサーバーです。

pip install fastapi[all]
# Macなどzshを使用している場合
pip install "fastapi[all]"

エディタの設定

個人的にはVSCodeを使っていますが、次の2つはどちらも便利です。

  • VSCode

    Visual Studio Code (VSCode) は、無料で広く使用されているコードエディタです。Python開発用の拡張機能(Python Extension for Visual Studio Code)をインストールすることで、コードの自動補完、デバッグ支援、リンティングなどの機能を利用できます。

    https://code.visualstudio.com/

  • PyCharm

    PyCharmはPython専用の統合開発環境(IDE)で、Community(無料版)とProfessional(有料版)があります。PyCharmには、コード補完、プロジェクト管理、バージョン管理システムの統合など、Python開発に特化した多くの機能が含まれています。

    https://www.jetbrains.com/ja-jp/pycharm/

これで、FastAPIを使った開発を始めるための基本的な環境構築が完了しました。

REST APIを作って簡単にテスト

ここでは、FastAPIを使用して基本的なWebアプリケーションを開発するプロセスを紹介します。最初にシンプルな"Hello World"アプリケーションを作成し、次に簡単なパスワード認証機能を実装します。最後に、データベース接続の概要を説明しますが、詳細は別の機会に詳しく解説します。

REST APIって何?

REST APIとは、ウェブアプリケーション同士が情報をやり取りするための、決まった約束事(規約)のことです。この約束事を決めることで、違うウェブアプリケーション同士でも情報のやり取りがスムーズにできるようになりました。

具体的には、以下のようなルールが決められています。

  • URIと呼ばれるWebの住所を使って、情報(リソース)を特定する
  • HTTPというインターネットの基本プロトコルを利用する
  • HTTPの機能(GET, POST, PUT, DELETEなど)を使って、リソースを取得したり更新したりする

このように、REST APIではウェブの既存の仕組み(URI、HTTP)を活用して情報をやり取りするルールを決めています。そのおかげで、プログラミング言語や技術が異なるウェブアプリケーション同士でも連携することができるようになりました。

例えば、スマートフォンアプリと会社のデータベースシステムを連携させる場合、REST APIのおかげで、お互いの技術の違いを気にすることなく情報のやり取りができます。このようにRESTは、ウェブアプリケーションの連携をスムーズにする規約として広く利用されています。

Hello Worldアプリの作成

FastAPIを使用した基本的なWebアプリケーションの作成方法を紹介します。これは、REST APIを作成する最初のステップとなります。

  1. アプリケーションの作成

    最初のステップとして、以下のコードをmain.pyというファイルに記述します。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    def read_root():
        return {"Hello": "World"}
  2. サーバーの実行

    以下のコマンドを実行して、アプリケーションを起動します。

    uvicorn main:app --reload
  3. テスト

    ブラウザを開いてhttp://127.0.0.1:8000にアクセスし、{"Hello": "World"}のレスポンスが表示されることを確認します。

パスワード認証機能の実装

FastAPIの依存性システムを利用して、簡単なパスワード認証機能を追加します。

依存性システムって何?

FastAPIの依存性システムは、依存性注入(Dependency Injection)という概念に基づいています。このシステムを使うことで、コードの再利用性を高め、テストのしやすさを向上させることができます。依存性注入とは、コードの一部(関数やクラスなど)が必要とするオブジェクトや設定を、そのコードの外部から提供することを指します。これにより、コードの各部分をより独立させ、結合度を低くすることができます。

  1. 依存性の作成

    認証機能を提供するための依存性(Dependency)を以下のように定義します。先ほどhello worldを作成したmain.pyファイルに記述してください。

    from fastapi import Depends, FastAPI, HTTPException, status
    from fastapi.security import HTTPBasic, HTTPBasicCredentials
    
    app = FastAPI()
    
    security = HTTPBasic()
    
    def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
        if credentials.username != "admin" or credentials.password != "secret":
            raise HTTPException(
                status_code=status.HTTP_401_UNAUTHORIZED,
                detail="Incorrect username or password",
                headers={"WWW-Authenticate": "Basic"},
            )
        return credentials.username
  2. 認証を要求するエンドポイントの作成

    認証を通過したユーザーのみがアクセスできるエンドポイントを作成します。これをmain.pyの下部に記述してください。

    @app.get("/users/me")
    def read_current_user(username: str = Depends(get_current_username)):
        return {"username": username}
  3. ブラウザで確認

    下記URLに接続してみてください。 http://127.0.0.1:8000/users/me

    ウィンドウにユーザー名adminとパスワードsecretを入力してログイン。 {"username":"admin"}と表示されれれば成功です。

データベース接続の概要

最後に、データベースへの接続設定について簡単に説明します。詳細な実装方法は、今後別の記事で詳しく解説します。

  • データベース接続

    FastAPIアプリケーションでは、SQLAlchemyやTortoise ORMなどのライブラリを利用してデータベースに接続します。これらのライブラリを使うことで、SQLデータベースとの非同期通信が可能になります。

  • 概念

    データベース接続を管理するためには、接続設定、モデル定義、CRUD操作の実装など、いくつかのステップが必要になります。

以上、FastAPIでの簡単なREST APIの作成方法を紹介しました。

4. まとめ

このハンズオンでは、FastAPIの基本的な概念から環境構築、シンプルなアプリケーション開発、認証機能の実装までを実践しました。FastAPIの高速性と開発の簡便さ、依存性注入の活用、テスト方法などについて学びを深めることができました。

しかし、FastAPIには更なる可能性が秘められています。今後は高度な機能の探索、より複雑なアプリケーション開発に取り組むことで、スキルをさらに磨いていきましょう。特に、データベースとの連携は実践的なWebアプリケーション開発において欠かせません。次回の記事では、FastAPIとデータベースを統合する方法について詳しく解説する予定です。

FastAPIの自動ドキュメント機能の活用や、コミュニティへの参加を通じた継続的な学習も重要です。つねに実験的な姿勢を持ち続け、新しい知見を吸収することで、FastAPIの真の力を発揮できるでしょう。ぜひ次の機会にもご期待ください。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事