開発日記

出退勤時間を記録するアプリのAPIを作る!


Warning: count(): Parameter must be an array or an object that implements Countable in /home/c9962019/public_html/mochinoki-labo.com/wp-content/plugins/rich-table-of-content/functions.php on line 490

こんにちは、MSKです。
出退勤時間を記録するアプリ開発の続きです。
今回はAPIを作成していきます。

関連する記事は以下になります。
出退勤の時間を記録するWebアプリの作り始め!
出退勤時間を記録するアプリのAPIを作る! <- この記事はここ!
出退勤時間を記録するアプリのユーザー登録と認証を実装する!

ファイルの準備など

前回作成したアプリのフォルダの中にurls.py、serializers.pyを追加します。
プロジェクトの中にあるurls.pyを次のように変更して、アプリへのつなぎこみを行います。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/',include('api.urls')),
]

シリアライザー作成

モデルで定義したtypeとcreated_atを取得したいので、serializers.pyは次のようにしました。

class ApiSerializer(serializers.ModelSerializer):
    created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M", read_only=True)

    class Meta:
        model = ApiModel
        fields = ['id','type','created_at']

APIの作成

view.pyに次のように記述しました。
使うシリアライザーとモデルを渡しているだけですね。

class ApiViewSet(viewsets.ModelViewSet):
    queryset = ApiModel.objects.all()
    serializer_class = ApiSerializer

アプリの中にあるurls.pyに次のように記述します。
django rest frameworkの機能を使って、簡単にCRUDを実現することができます。

from rest_framework import routers
from .views import ApiViewSet
router = routers.DefaultRouter()
router.register('',ApiViewSet)
urlpatterns = [
    path('',include(router.urls))
]

動作確認

runserverをして、GETとPOSTの動作確認をします。
動作確認にはPostmanを使用します。

Postmanのインストーラーのダウンロードはこのページから行うことができます。

Postmanの画面中央上部にタブがあるので、+を押して新しいリクエストを作成します。

まずはGETを試します。
選択肢からGETを選びます。(デフォルトでGETになっていると思うので、そのままでOKです。)
その隣にURLを入力します。
今回はlocalhostなので、http://127.0.0.1:8000/api/と入力します。

入力したらSendボタンを押します。
次のように以前に登録したデータが返ってきました。
成功です。

次にPOSTを試します。
新しいタブを作成して、左側の選択肢からPOSTを選択します。
URLはそのままです。
Bodyに登録したいデータを入力します。
フォームの形でデータを渡すので、x-www-form-urlencodedを選択します。
今回はtype=1(出勤)で登録します。
created_atは自動で作成されるようにしているので入力しません。

Sendボタンを押すと次のように結果が返され、正常に登録ができました。

念のため、もう一度GETしてみると次のようになり、新しく追加した項目が増えています。

POSTも正常に動いています。

最後に

今回はAPIを作成しました。
django rest frameworkを使うと簡単にGETやPOSTなどのREST APIが作成できてしまいます。

今の状態だとURLが分かってしまうと誰にでもPOSTやGETができてしまうので問題です。
次回は認証関係を作っていきたいと思います。

以上、「出退勤時間を記録するアプリのAPIを作る!」でした。
最後までご覧いただき、ありがとうございました。

ABOUT ME
MSK
九州在住の組み込み系エンジニアです。 2児の父親でもあります。 数学やプログラミングが趣味です。 最近RustとReact、結び目理論と曲面結び目理論にはまっています。