RESTエンドポイントの構築
JSONレスポンスを返します
「RESTエンドポイントの構築」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
REST API とは
REST API は、標準的なメソッドを使って HTTP 経由でリソースを公開します。HTML ページの代わりに、通常は JSON としてデータを返し、ほかのプログラムが利用できるようにします。
from flask import Flask, jsonify
app = Flask(__name__)
# REST endpoints return data, not pages
print('REST APIs speak JSON over HTTP')JSON の返却
jsonify() は Python の dict またはリストを、正しいコンテンツタイプの JSON レスポンスに変換します。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/status')
def status():
return jsonify({'status': 'ok'})
print('jsonify builds a JSON response')dict の自動変換
現在の Flask では、返された dict も自動的に JSON に変換されるため、多くの場合は jsonify() を省略できます。
from flask import Flask
app = Flask(__name__)
@app.route('/api/ping')
def ping():
return {'message': 'pong'}
print('Returning a dict yields JSON')リストの返却
コレクションを返すには、リストを jsonify() に渡します。各要素は通常、1つのリソースを表す dict です。
from flask import Flask, jsonify
app = Flask(__name__)
books = [{'id': 1, 'title': 'A'}, {'id': 2, 'title': 'B'}]
@app.route('/api/books')
def list_books():
return jsonify(books)
print('Return a list of resources')1つのリソースの GET
動的な URL 部分を使って、id で1つの項目を取得します。存在しない場合は 404 を返します。
from flask import Flask, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>')
def get_book(bid):
book = books.get(bid)
if book is None:
return jsonify({'error': 'not found'}), 404
return jsonify(book)
print('GET /api/books/1')POST による作成
POST リクエストはリソースを作成します。JSON 本文を読み取り、新しい項目を構築して、ステータス 201 Created とともに返します。
from flask import Flask, request, jsonify
app = Flask(__name__)
books = []
@app.route('/api/books', methods=['POST'])
def create_book():
data = request.get_json()
book = {'id': len(books) + 1, 'title': data['title']}
books.append(book)
return jsonify(book), 201
print('POST creates and returns 201')PUT による更新
PUT は、id で識別される既存のリソースを置き換えるか更新します。
from flask import Flask, request, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>', methods=['PUT'])
def update_book(bid):
if bid not in books:
return jsonify({'error': 'not found'}), 404
books[bid]['title'] = request.get_json()['title']
return jsonify(books[bid])
print('PUT updates a resource')DELETE による削除
DELETE はリソースを削除します。成功時にステータス 204 No Content を返すのが一般的です。
from flask import Flask, jsonify
app = Flask(__name__)
books = {1: {'id': 1, 'title': 'A'}}
@app.route('/api/books/<int:bid>', methods=['DELETE'])
def delete_book(bid):
if bid in books:
del books[bid]
return '', 204
return jsonify({'error': 'not found'}), 404
print('DELETE removes a resource')ステータスコードの重要性
REST では HTTP ステータスコードを使用します。200 OK、201 Created、204 No Content、400 Bad Request、404 Not Found です。
# 200 success
# 201 created
# 204 no content
# 400 bad request
# 404 not found
print('Use the right status code')本文の検証
作成する前に、必須フィールドが存在することを確認します。本文が無効な場合は、エラーメッセージとともに 400 を返します。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/books', methods=['POST'])
def create_book():
data = request.get_json(silent=True) or {}
if 'title' not in data:
return jsonify({'error': 'title required'}), 400
return jsonify(data), 201
print('Validate JSON before using it')一貫したレスポンス
優れた API は予測しやすい形式でレスポンスを返します。多くの場合、データとエラーを常に同じ方法でラップするため、クライアントは安心して利用できます。
from flask import jsonify
# Success: {'data': {...}}
# Error: {'error': 'message'}
# Keep the shape consistent across endpoints
print('Predictable shapes help clients')理解度チェック
REST に関する知識を確認しましょう。
まとめ
JSON REST エンドポイントを構築しました。
jsonify()(または返された dict)で JSON レスポンスを生成します- HTTP メソッドを対応付けます。GET は読み取り、POST は作成、PUT は更新、DELETE は削除です
- 201、204、400、404 など、意味のあるステータスコードを返します
- リクエスト本文を検証し、レスポンスの形式を一貫させます
よくある質問
「RESTエンドポイントの構築」レッスンは無料ですか?
はい。「RESTエンドポイントの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「RESTエンドポイントの構築」で何を学びますか?
JSONレスポンスを返します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「RESTエンドポイントの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルートとビュー
- Jinja2によるテンプレート
- フォームとリクエストデータ
- RESTエンドポイントの構築