34
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DMM WEBCAMPAdvent Calendar 2019

Day 17

【API初心者向けハンズオン】StrapiでAPI作ってAPI叩くマン

Last updated at Posted at 2019-12-17

APIってなんなんすか!?
APIを作ってみたい!
APIって作るのむずかしいんでしょ?
エーピーアイ!エーピーアイ!

ダイジョーブキミニモツクレルヨ

速攻でAPIが作れるStrapi

StrapiというHeadless Cmsとかってのを使うとコード書かなくてもAPIが作れるんす。

Strapi公式

用意しておくこと

docker-composeが使えるようにしておくこと
dockerやdocker-composeがよくわからなくてもいいです

docker

環境構築

docker-compose.ymlで作りますよっと
適当なところでstrapiみたいな適当な名前のフォルダ作って、その中に下記のコードのdocker-compose.ymlを入れます。

strapi/docker-compose.yml
version: '3'
services:
  strapi:
    container_name: strapi
    image: node:13.3.0
    environment:
      - DATABASE_CLIENT=postgres
      - DATABASE_HOST=db
      - DATABASE_PORT=5432
      - DATABASE_NAME=strapi
      - DATABASE_USERNAME=strapi
      - DATABASE_PASSWORD=strapi
    ports:
      - 1337:1337
    volumes:
      - ./app:/srv/app
    working_dir: /srv/app
    tty: true
    depends_on:
      - postgres
  postgres:
    container_name: postgres
    image: postgres
    restart: always
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: strapi
      POSTGRES_PASSWORD: strapi
      POSTGRES_DB: strapi

作ったらターミナルでdocker-compose.ymlと同階層に移動して、

$ docker-compose up -d

環境構築してくれます。
-dオプション付けるとバックグラウンドでコンテナ起動します。

Strapiを作成

次にstrapiという名前のコンテナにはいりますよって

$ docker-compose exec strapi /bin/bash

コンテナに入ったらStrapiを作成するコマンドを実行します。

$ npx create-strapi-app strapi-dev

※strapi-devがアプリ名になります。名前はなんでもいいっす。

ターミナルで下記のことを聞かれます。

Choose your installation type 
❯ Quickstart (recommended) 
  Custom (manual settings) 

Quickstart (recommended)を選択しましょう。
strapiを勝手に作成してくれます。
10分ぐらいはかかります。待ちましょう。
ログが止まって途中であれ?っと思ってもしっかり待ちましょう。
腰を据えて待ちます。

スクリーンショット 2019-12-17 5.41.11.png

こんなのがでてきたらOK
ログに出ているhttp://localhost:1337/adminへアクセスしてみましょう。

スクリーンショット 2019-12-17 1.43.11.png

こんな画面が出てきたら成功です。

情報を打ち込んでReady to startを押します。
※一番下のチェックボックス入れるとstrapiの最新の情報をメールへお届けしてくれます。

スクリーンショット 2019-12-17 1.45.27.png

さて、そんなこんなでこんな画面へきましたかね。

次にコンテンツタイプを作成するを押しましょう。

スクリーンショット 2019-12-17 2.32.02.png

こんな画面へ遷移します。
一言で言えばDBのテーブル名を作成するところです。
DBはpostgresSQLを使うようにdocker-compose.ymlに記述されています。

今回は東京都の地区別の犯罪指数を作ることにします。
名前にcrimerateと入力して、接続はデフォルト、説明文を入れてあげます。
そしてdoneをクリック

スクリーンショット 2019-12-17 2.34.00.png

次はフィールド(カラム)のデータ型を決める画面に遷移します。
地区名が入るのでStringを選択します。

スクリーンショット 2019-12-17 2.35.34.png

カラム名をareaとしてdoneをクリック

スクリーンショット 2019-12-17 2.36.30.png

画面が遷移してAreaというフィールド(カラム)が追加されたのが分かります。
もう一つ犯罪指数のフィールドを作るのでAdd Another Fieldをクリック

スクリーンショット 2019-12-17 2.38.50.png

指数は数値なのでNumberをクリック
スクリーンショット 2019-12-17 2.40.05.png

名前(カラム名)にexponentsと入力して、数値形式はそのままでdone
スクリーンショット 2019-12-17 2.41.22.png

exponentsのフィールドが追加されました。
右上の保存をクリックします。
スクリーンショット 2019-12-17 2.24.04.png

保存処理を待ちます。
スクリーンショット 2019-12-17 2.20.23.png
と、でればOK
少し待つと...
スクリーンショット 2019-12-17 2.43.55.png
画面が表示されます。
左のサイドバー(ダッシュボード)の上を見るとCrimerateと追加されました。

さて次は作ったフィールドに実際に値を入れよう
左のサイドバー(ダッシュボード)のCrimeratesを押します
スクリーンショット 2019-12-17 2.46.03.png

右上の "+ Crimerateを追加"をクリック
スクリーンショット 2019-12-17 2.47.49.png

ここでareaと指数に値を入れて保存をクリックします。
スクリーンショット 2019-12-17 2.48.37.png

反映されました。

いくつかデータを入力しておきます。
スクリーンショット 2019-12-17 2.51.22.png

お次は左のサイドバー(ダッシュボード)のロールと権限をクリック
スクリーンショット 2019-12-17 2.55.05.png
publicを選択
スクリーンショット 2019-12-17 2.57.26.png
権限のcreateとfindにチェックを入れて保存
※createやfindを誰でも使えるように許可するということをしています。
スクリーンショット 2019-12-17 3.03.45.png

Strapiで作成したAPIを叩いてみる

さてAPIを叩きましょう。

もう一度ロールと権限のpublicをクリックしてfindの歯車をみつけてクリック
すると右の方に"Bound route to Crimerate.find"とある下に
GET /crimerate とあります。
GETでcrimerateをfindする。取得するということ。
スクリーンショット 2019-12-17 3.01.45.png
とにかくhttp://localhost:1337/crimeratesにアクセスしよう!
スクリーンショット 2019-12-17 3.12.04.png

さきほど入力したデータをfind(取得)して表示されています。
ちなみにjsonviewってchromeの拡張ツール入れると...
スクリーンショット 2019-12-17 3.14.37.png
いい感じに整形して表示してくれる

axiosを利用してAPIを叩いてデータを登録

さて今度はPOSTでデータを登録するぞー。
POSTするにはブラウザからリクエストというのを想定するので...
axiosというライブラリを使ってサクッとPOSTしてやりましょう。
index.htmlをどこでもいいので作って以下のコードを貼っつけてファイルを保存しよう。
※areaに葛飾区、exponentsに4260という値がPOSTされるように記述しています。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>axios post</title>
</head>
<body>
<h1>axiosでPOST</h1>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
// POST通信
axios({
    method : 'POST',
    url    : 'http://localhost:1337/crimerates',
    data   : { area : '葛飾区', exponents : '4260' }
}).then(response => console.log(response.status));
</script>
</body>
</html>

保存できたらブラウザに読み込ませて検証ツールを開いてconsoleを見てみよう。
スクリーンショット 2019-12-17 3.54.56.png

200はHTTPのステータスコードでOK的なこと。
つまりaxiosによるPOSTのHTTPリクエストが成功したということ。

というわけでstrapiの管理画面でデータが入ったか確認しよう。
POSTしたデータはareaに葛飾区、exponentsに4260
スクリーンショット 2019-12-17 3.57.39.png
おー入ってます入ってます。

お疲れさまでした。

おわりに

Strapiを使うと簡単にAPIを作ることができる。
今回はお試しハンズオンでした。高度な設定や、カスタムをすると結構いろんなことができるので、個人的にはプロトタイプの作成や簡易なものであればStrapiを利用したりします。
フロントをvue.jsで作成してStrapiでAPIを作成してSPAでRESTfulな開発もサッサとできてしまいます。
ドキュメントもどんどん充実していってるので使えるものは使っときましょう。

34
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?