LoginSignup
1
1

More than 1 year has passed since last update.

DockerとFlaskで始めるGraphQL

Posted at

はじめに

Grapheneのチュートリアルを参考にしています。

GraphQLとは、以下のようなものです。

GraphQLはAPIのクエリ言語であり、データに対して定義したタイプシステムを使用してクエリを実行するためのサーバー側のランタイムです。GraphQLは特定のデータベースやストレージエンジンに縛られておらず、代わりに既存のコードとデータによってバックアップされています。

ptyhonでGraphQLを実装するには、Grapheneというツールが必要です。
Grapheneは、PythonでGraphQL APIを実装するためのツールを提供するライブラリです。

実装

今回の実装はdockerを使いました。

githubのレポジトリーです。

ファイル構成

.
├── docker-compose.yml
└── opt
    ├── Dockerfile
    ├── main.py
    └── requirements.txt

解説

dockerfile
FROM python:3.8.8-buster
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

ENV PYTHONPYCACHEPREFIX=/root/pycache

RUN apt-get install -y vim less sqlite3
RUN pip install --upgrade pip --user
RUN pip install --upgrade setuptools --user

WORKDIR /root/opt

COPY . .
docker-compose.yml
version: "3"
services:
  web:
    build: ./opt
    container_name: "flask"
    tty: true
    volumes:
      - ./opt:/root/opt
    ports:
      - 8080:8080
requirements.txt
numpy==1.16.0
requests==2.23.0
Flask==2.2.2
Flask-Cors==3.0.10
graphene==3.2.1

Grapheneのスキーマ

{
  hello(name: "friend")
}

helloは飛び出すスキーマ名です。かっこの中は引数です。
この形で呼び出します。

resolve_helloでスキーマと連携された関数です。

main.py
from graphene import ObjectType, String, Schema, Int
from flask import Flask, request, jsonify
from flask_cors import CORS
import json

app = Flask(__name__)
CORS(app)


class Query(ObjectType):
    hello = String(name=String(default_value="bob"))

    def resolve_hello(root, info, name):
        return f'My name is {name}'


schema = Schema(query=Query)


@app.route('/', methods=['POST'])
def hello():
    data = json.loads(request.data)
    result = schema.execute(data['query']).data
    return json.dumps(result)


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)

結果

Screenshot 2023-01-25 at 15.48.51.png

Screenshot 2023-01-25 at 15.48.59.png

1
1
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
1
1