Mucahid Yazar
mucahid.dev

Follow

mucahid.dev

Follow
GraphQL ve Prisma ile REST API

GraphQL ve Prisma ile REST API

Mucahid Yazar's photo
Mucahid Yazar
·Jan 6, 2021·

3 min read

Bu yazı serim 2–3 parça veya daha uzun olacaktır. GraphQL ve Prisma’nın ne olduğunu burada size anlatmaktansa adım adım neyi ne için yaptığımı açıklayarak 0'dan Önce GraphQL servisimizi oluşturacağız daha sonra Prisma servisimizi oluşturacağız.

İlk önce Proje klasörümüzü oluşturuyoruz. Bu klasörün içine root dizini diyeceğim zaman zaman. Örnek olarak ben graphql-prisma adında bir klasör oluşturdum. Ve aşağıda ki komutla projemizin package.json’unu oluşturuyoruz.

npm init -y

Önce aşağıdaki modülleri yüklüyoruz.

npm install babel-cli babel-cli => Babel komutlarını çalıştırır

npm install babel-preset-env babel-preset-env => Babel’a ne değişmesi gerektiğini söyler. Yani ES6'i aktif eder ve böylelikle import/export gibi modern Javascript özelliklerini kullanabiliriz.
Ve root dizininde .babelrc adında dosya oluşturuyoruz ve içine aşağıda ki kodu yazıyoruz.

/root/.babelrc

npm install babel-node babel-node => Terminalden babel-node komutunun çalışmasını sağlamak için gereklidir.

npm install babel-plugin-transform-object-rest-spread babel-plugin-transform-object-rest-spread => Javascript’teki … spread operatörlerinin nodejs tarafından anlaşılması ve tanınması için kuruyoruz.
Ve root dizininde .babelrc adında dosya oluşturuyoruz ve içine aşağıda ki kodu ekliyoruz.

/root/.babelrc

Ve package.json’a aşağıdaki scripti ekleyerek artık çalıştırabiliriz.
“start”: “babel-node src/index.js”

LIVE RELOAD

Tabi serverımızı bu şekilde başalatırsak her değişiklikte kapatıp tekrar çalıştırmamız gerekecek. Bunun yerine nodemon’u yükleyerek çalıştıracağız ve dosyalarımızda her değişiklikte nodemon bizim için live-reload yapacaktır.

— exec ile neyin izleneceğini nodemon’a söylüyoruz.

npm install nodemon
“start”: “nodemon src/index.js --exec babel-node”

GRAPHQL

Şimdi GraphQL servisimizi yazmaya başlayabiliriz. Bunun için önce graphql-yoga modülünü aşağıdaki kod ile yükleyerek projemize dahil edeceğiz. Graphql-yoga Graphql servisi kurarken bir çok şeyi bize kolaylaştırarak sunuyor. Authentication işlemi ve Subscriptionlarda özellikle. Ve servisimizide ayağa kaldırıyor. O yüzden bu modülü tercih ediyoruz.

npm install graphql-yoga

Şimdi de dosya yapımızı kuralım. src adında bir klasör oluşturalım root dizininde. Ve bu src klasörü içerisin de, schema.graphql ve resolvers klasörü oluşturalım.

schema.graphql içinde Graphql Typelarımız, Inputlarımız, Enumlarımız, Querylerimiz Mutationlarımız bulunacak.

Scalar Types

GraphQL’de 5 çeşit scalar type çeşidimiz bulunmaktadır. Bunlar String, Boolean, Int, Float ve ID dir.

Bunlar ile tanımladığımız Queryler, Mutationlar veya diğer şeyler için sınırlar belirleriz. Örnek olarak bir Product Modeli üretelim aşağıda

/root/src/schema.graphql

Yukarıda Product adında bir type belirledik. Bunu bir Database modeli olarak düşünebilirsiniz.

Karşılarına verdiğimiz değer o key’in ne olacağını söylemek anlamına gelir. ! işareti ise o verinin sorgulandığında kesinlikle null dönmemesi gerektiğini yani nullable olduğunu söyler. Yani Product adında bir modelimiz var ve bu product’un title’ı bir string olacak ve kesinlikle bir title dönecek buradan.

Ve daha sonra şimdi resolvers klasörümüzün (Query.js, Mutation.js, Subscription.js) bu isimlerde içinde 3 tane dosya oluşturuyoruz. Ve bu dosyaların içerisi şimdilik sadece aşağıdaki gibi olsun yeterlidir.

/root/src/resolvers/Query.js

Daha sonra src klasörü içerisinde index.js dosyamızı oluşturuyoruz.

Ve buraya oluşturduğumuz resolvers dosyalarını (Query.js, Mutation.js, Subscription.js) ve GraphQLServer’ı graphql-yoga’dan index.js içerisine aşağıdaki gibi import ediyoruz

/root/src/index.js

daha sonra server adında bir değişken oluşturuyoruz ve dahil ettiğimiz GraphQLServer ı new ile çağırarak GraphQL servisimizin ayarlarını içerisine aşağıdaki gibi yapıyoruz.

/root/src/index.js

import ettiğimiz 3 resolver dosyasını new GraphQLServer ile içerisindeki resolvers objesine gönderiyoruz ve typeDefs’ede oluşturduğumuz schema.graphql dosyasının yolunu veriyoruz.

Ve daha sonrada aşağıdaki gibi new GraphQLServer’ı atadığımız değişkeni kullanarak servisimizi ayağa kaldıracak fonksiyonu çalışır hale getirmek için hazırlıyoruz.

/root/src/index.js

Ve final olarak index.js dosyamız aşağıda ki gibi olacaktır.

Ve son olarak GraphQL servisimizi çalıştırabilmek için aşağıdaki scripti package.json’a tanımlıyoruz.

“dev”: “nodemon src/index.js --ext js,graphql --exec babel-node”

Burada tanımladığımız --ext js,graphql ile schema.graphql içerisindeki değişikleride izlemesini nodemon’a söylüyoruz.

Ve şimdi npm run dev diyerek GraphQL servisimizi çalıştırarak ayağa kaldırmış olacağız.

Bir sonraki yazımda GraphQL servisimizde çalıştıracağımız Query ve Mutationlara değineceğim. O zamana dek hoşçakalın.

 
Share this