0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートとビュー
  2. Jinja2によるテンプレート
  3. フォームとリクエストデータ
  4. RESTエンドポイントの構築
← Python Academyに戻る