「サーバ - REST API」の版間の差分
(→概要) |
|||
79行目: | 79行目: | ||
Pythonと仮想環境をインストールする。<br> | Pythonと仮想環境をインストールする。<br> | ||
# RHEL | # RHEL | ||
sudo dnf install python3 python3-pip python3- | sudo dnf install python3 python3-pip python3-virtualenv | ||
# SUSE | # SUSE |
2025年1月1日 (水) 15:18時点における版
概要
REST APIは、HTTPプロトコルを使用して、クライアントとサーバ間でリソースのやり取りを行うインターフェースである。
主なHTTPメソッド (GET、POST、PUT、DELETE) を使用して、リソースの取得、作成、更新、削除等の操作を実現する。
サーバの実装において、Linuxディストリビューションに必要なプログラム言語とフレームワークをインストールする。
一般的な選択肢としては、PythonのFlaskやDjango、Node.jsのExpress、RubyのRails、JavaのSpring Boot等がある。
以下の例では、PythonのFlaskを使用した基本的なREST APIを構築している。
from flask import Flask, request, jsonify
app = Flask(__name__)
# データストアの代わりとなる簡単なディクショナリ
books = {}
@app.route('/api/books', methods=['GET'])
def get_books():
return jsonify(books)
@app.route('/api/books', methods=['POST'])
def add_book():
book = request.get_json()
books[len(books) + 1] = book
return jsonify({'message': 'Book added successfully'})
if __name__ == '__main__':
app.run(debug=True)
セキュリティでは、APIキーの実装、HTTPS通信の設定、入力データのバリデーション、SQLインジェクション対策等を行う必要がある。
また、認証・認可の仕組みとして、JWTトークンやOAuth2.0の実装も検討する必要がある。
パフォーマンスとスケーラビリティでは、キャッシュの実装 (例: Redis)、データベースの最適化 (インデックス設計等)、ロードバランサの設置が重要である。
また、コンテナ化 (Podman等) やオーケストレーション (Kubernetes) の導入も検討する。
APIのドキュメント化も重要な要素となる。
Swagger / OpenAPIを使用することにより、APIの仕様を明確に定義して、自動的にドキュメントを生成することができる。
これにより、他の開発者がAPIを理解および使用することが容易になる。
モニタリングとログ収集の設定において、PrometheusやGrafanaを使用してメトリクスを収集・可視化して、
ELKスタック (Elasticsearch、Logstash、Kibana) でログを収集・分析することにより、APIの健全性を監視することができる。
REST APIサーバを構築・運用する場合は、以下に示す事柄に注意する。
- 定期的なバックアップの実施
- セキュリティアップデートの適用
- アクセスログの監視
- レート制限の実装
- 適切なエラーハンドリング
- データベースの最適化
- APIドキュメントの作成と管理
サーバ環境のインストール
まず、システムを更新を行う。
# RHEL sudo dnf update # SUSE sudo zypper update # Raspberry Pi sudo apt update sudo apt upgrade
次に、Linuxサーバに必要な基本環境をインストールする。
# RHEL sudo dnf install curl wget git # SUSE sudo zypper install curl wget git # Raspberry Pi sudo apt install curl wget git build-essential
開発言語とフレームワークの選択
Python + FastAPIを使用する場合
Pythonと仮想環境をインストールする。
# RHEL sudo dnf install python3 python3-pip python3-virtualenv # SUSE sudo zypper install python3 python3-pip python3-virtualenv # Raspberry Pi sudo apt install python3 python3-pip python3-venv
Pythonと仮想環境の設定を行う。
python3 -m venv venv
vi ~/.profile
# ~/.profileファイル source venv/bin/activate
必要なPythonライブラリをインストールする。
pip install fastapi uvicorn sqlalchemy
Node.js + Expressを使用する場合
Node.jsをインストールする。
Node.jsの詳細なインストール手順は、インストール_-_Yarnを参照すること。
プロジェクトディレクトリを作成する。
mkdir <任意のディレクトリ 例: ~/my-api> cd <作成したディレクトリ 例: ~/my-api>
プロジェクトに必要なJavaScriptライブラリをインストールする。
npm init npm install express body-parser cors
データベースの設定
PostgreSQLを使用する場合
PostgreSQLをインストールする。
# RHEL sudo dnf install postgresql libpq5 # SUSE sudo zypper install postgresql libpq5 # Raspberry Pi sudo apt install postgresql postgresql-contrib
データベースを作成する。
sudo -u postgres createdb myapi_db sudo -u postgres createuser myapi_user
APIの基本的な実装
Python + FastAPIを使用する場合
# main.pyファイル
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
@app.get("/items")
async def read_items():
return {"items": []}
@app.post("/items")
async def create_item(item: Item):
return item
HTTPS対応
Let's Encryptを使用する場合
Certbotをインストールする。
# RHEL sudo dnf install ca-certificates python3-certbot # SUSE sudo zypper install python3-certbot python3-certbot-nginx # Raspberry Pi sudo apt install certbot python3-certbot-nginx
SSL証明書を取得する。
sudo certbot --nginx -d <ドメイン名 例: example.com>
リバースプロキシの設定
Nginxを使用する場合
# /etc/nginx/sites-available/myapiファイル
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Systemdサービスファイルの作成
# /etc/systemd/system/<任意のサービス名>.serviceファイル
[Unit]
Description=<サービスファイルの説明>
After=network.target
[Service]
User=<実行する任意のユーザ名>
WorkingDirectory=<REST APIのプロジェクトディレクトリ 例: /home/<ユーザ名>/my-api>
ExecStart=/<uvicorn実行ファイルのパス> main:app --host <ホスト名またはIPアドレス> --port <ポート番号>
# 例: ExecStart=/home/myapi_user/my-api/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
ファイヤーウォールの設定
Firewalldの場合
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
UFWの場合
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
監視とログ管理
PrometheusのGithubにアクセスして、Prometheusをインストールする。
ダウンロードしたファイルを解凍する。
tar xf prometheus-<バージョン>.tar.gz
Grafanaをインストールする。
sudo apt install apt-transport-https sudo apt install software-properties-common sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
CI/CD環境の構築
GitLabを使用する場合
# .gitlab-ci.ymlファイル
stages:
- test
- deploy
test:
stage: test
script:
- pip install -r requirements.txt
- pytest
deploy:
stage: deploy
script:
- ssh user@yourserver 'cd /path/to/api && git pull && systemctl restart myapi'
only:
- master