/
/
Membuat API Dengan Flask Dan GraphQL
Posted 5 years ago • 589 Dibaca

Membuat API Dengan Flask Dan GraphQL

Pada tutorial kali ini, kita akan mencoba membuat API (Application Programming Interface) dengan menggunakan GraphQL untuk mengirim data ke client-side. Lalu apa itu GraphQL?

GraphQL adalah sebuah bahasa query modern untuk API. Dengan menggunakan syntax tertentu, GraphQL dapat mengambil hanya data apa saja yang diperlukan secara lebih spesifik.

Karena GraphQL memberikan deskripsi data yang lengkap dan mudah dipahami, memberi client-side kemudahan mengambil hanya data yang dibutuhkan dan tidak lebih. Hal ini juga membuatnya GraphQL lebih mudah untuk mengembangkan API dari waktu ke waktu dan memungkinkan alat pengembang yang kuat.

Untuk lebih jelasnya bisa dilihat disini.

Agar lebih jelasnya, langsung saja kita coba membuat project dengan menggunakan GraphQL.

Tutorial

Pertama-tama kita membuat folder  dengan nama learn_graphql. Lalu dalam folder tersebut kita isi tiga file server.py, schema.py dan models.py. Untuk lebih detailnya nanti kita bahas satu persatu ketiga file tersebut.

Instalasi

Install semua library yang kita butuhkan.

Flask==1.1.1
graphene==2.1.8
Flask-GraphQL==2.0.1
SQLAlchemy==1.3.11

Library Flask akan kita gunakan untuk membangun server. Library Graphene digunakan untuk membuat schema database. Library Flask-GraphQL digunakan untuk menampilkan user interface GraphQL. Sedangkan SQLAlchemy akan kita gunakan sebagai ORM (Object Relational Mapping) pada database yang akan kita gunakan.

- Server

Kita mulai membuat server seperti pada file berikut ini; 

from flask import Flask, render_template
from flask_graphql import GraphQLView
from schema import schema

app = Flask(__name__)

# visualisasi graphql 
app.add_url_rule('/graphql',
			view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

@app.route('/')
def index():
	return "Go to /graphql"

if __name__ == "__main__":
	app.run(port=5001, debug = True)

Seperti yang kita lihat bahwa pada file diatas melakukan import `from schema import schema`, untuk itu selanjutnya kita akan membuat sebuah schema pada file schema.py. File tersebut, seperti di bawah ini;

- Schema

import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
from models import db_session, User, Post


#Schema objects detail post & user
class PostObject(SQLAlchemyObjectType):
    class Meta:
        model = Post
        interfaces = (graphene.relay.Node, )
class UserObject(SQLAlchemyObjectType):
   class Meta:
       model = User
       interfaces = (graphene.relay.Node, )
class Query(graphene.ObjectType):
    node = graphene.relay.Node.Field()
    all_posts = SQLAlchemyConnectionField(PostObject)
    all_users = SQLAlchemyConnectionField(UserObject)

#Schema objects create post
class CreatePost(graphene.Mutation):
    class Arguments:
        title = graphene.String(required=True)
        body = graphene.String(required=True) 
        username = graphene.String(required=True)
    post = graphene.Field(lambda: PostObject)
    def mutate(self, info, title, body, username):
        user = User.query.filter_by(username=username).first()
        post = Post(title=title, body=body)
        if user is not None:
            post.author = user
        db_session.add(post)
        db_session.commit()
        return CreatePost(post=post)
        
class Mutation(graphene.ObjectType):
    create_post = CreatePost.Field()


schema = graphene.Schema(query=Query, mutation=Mutation)

 

Meski file diatas terlihat cukup rumit, sebenarnya hanya berisi tentang cara Library Graphene membuat API GraphQL menjadi lebih mudah digunakan. Dengan library tersebut, membangun schema GraphQL menjadi lebih mudah. Untuk lebih jelasnya bisa dilihat disini.

- Models

Setelah schema dibuat, selanjutnya kita akan membuat database. Disini kita akan membuat database menggunakan ORM SQLAlchemy pada file models.py.

import os
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.orm import relationship
from sqlalchemy import Column, DateTime, ForeignKey, Integer, Text, func, String

Base = declarative_base()

#create database location
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "mydb2.db"))

engine = create_engine(database_file, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base.query = db_session.query_property()

class User(Base):
    __tablename__ = 'users'
    uuid = Column(Integer, primary_key=True)
    username = Column(String(256), index=True, unique=True)
    posts = relationship('Post', backref='author')

class Post(Base):
    __tablename__ = 'posts'
    uuid = Column(Integer, primary_key=True)
    title = Column(String(256), index=True)
    body = Column(Text)
    author_id = Column(Integer, ForeignKey('users.uuid'))

 

Sebelum aplikasi siap kita coba, kita akan membuat database terlebih dahulu. Caranya kita ke directory dimana file models.py berada. Setelah itu pada terminal, masuk ke python shell. Lalu eksekusi script berikut ini;

Jika script diatas berhasil, maka database telah selesai dibuat. Selanjutnya kita bisa jalankan aplikasi kita dengan running file server.py, lalu akses ke;

http://127.0.0.1:5001/graphql

Jika berhasil, maka akan menampilkan interface testing sebagai berikut ini;

Lalu kita bisa mencoba dengan menuliskan beberapa query seperti berikut ini;

Sekian tutorial membuat API dengan menggunakan GraphQL. Selamat mencoba!!

full code : https://github.com/idmore/API-Dengan-GraphQL

 

referensi :

https://medium.com/@marvinkome/creating-a-graphql-server-with-flask-ae767c7e2525

https://www.howtographql.com/graphql-python/0-introduction/

 

MauCoding © 2025 powered by YMG Team