【Python/Django】JSON形式でレスポンスをするwebAPIを作成する


概要

 この記事は初心者の自分がRESTfulなAPIとswiftでiPhone向けのクーポン配信サービスを開発した手順を順番に記事にしています。技術要素を1つずつ調べながら実装したため、とても遠回りな実装となっています。

 前回の Djangoのテンプレート機能を使ってみるで作ったコードを改造して、JSON形式でレスポンスするようにします。Django Rest Frameworkという便利なフレームワークが存在しますが、まずは仕組みを理解するのを目的に Django Rest Framework 等は使わずに書いてみます。

参考

Python Django入門 (6)

環境

Mac OS 10.15
VSCode 1.39.2
pipenv 2018.11.26
Python 3.7.4
Django 2.2.6

手順

  • views.pyを修正
  • 動作確認

views.pyを修正

データをjson形式に変換するためにjsonのモジュールをインポートします。
コードにimport jsonを追加します。

json.dumpsを使って、構造体をインプットにしてjson形式の文字列を作成するプログラムを追加します。構造体を作るコードは元のコードのparams = { }の部分をそのまま流用します。

json形式の文字列を作るコードを追加します。引数として構造体データのparamsを渡しています。
json_str = json.dumps(params, ensure_ascii=False, indent=2)

戻り値は、HttpResponseメソッドで単純にJson形式の文字列を返すだけです。
return HttpResponse(json_str)

修正後のviews.pyはこちらです。

views.py
from django.shortcuts import render
from django.http import HttpResponse
import json #追加した

def coupon(request):
    if 'coupon_code' in request.GET:
        coupon_code = request.GET['coupon_code']
        if coupon_code == '0001':
            benefit = '1000円引きクーポン!'
            deadline = '2019/10/31'
            message = ''
        elif coupon_code == '0002':
            benefit = '10%引きクーポン!'
            deadline = '2019/11/30'
            message = ''
        else:
            benefit = 'NA'
            deadline = 'NA'
            message = '利用可能なクーポンが見つかりません'

        params = {
            'coupon_code':coupon_code,
            'coupon_benefits':benefit,
            'coupon_deadline':deadline,
            'message':message,
        }
        #json形式の文字列を生成
        json_str = json.dumps(params, ensure_ascii=False, indent=2) 
        return HttpResponse(json_str)

動作確認

コードを保存してdjangoのサーバを起動します。

ターミナルからcurlコマンドでhttp://127.0.0.1:8000/coupon/?coupon_code=0001にアクセスすると、jsonで値が取得出来ています。

次はブラウザでhttp://127.0.0.1:8000/coupon/?coupon_code=0001にアクセスすると、json形式のデータが表示されました。

以上です。

次回はクーポン情報をレスポンスするアプリ側の実装をします(swift)