Merhaba Arkadaşlar, bu yazımda Express ve Apollo Server ile GraphQL API Oluşturma konusundan bahsedeceğim.
GraphQL, modern web geliştirme dünyasında popüler bir veri sorgulama dilidir. Geleneksel REST API yerine GraphQL kullanarak daha esnek ve optimize veri sorgulamaya olanak sağlar. Bu yazıda, Node.js ve Apollo Server kullanarak bir GraphQL API’ını sıfırdan oluşturacağız. API’miz bir ürün (Product) listesi içerecek ve ürün ekleme ile listeleme işlemleri yapacağız.
Proje Yapısı ve Gerekli Paketler
Gerekli Paketler
Projemizde şu paketlere ihtiyacımız olacak:
- express: Node.js frameworkü.
- apollo-server-express: Apollo Server’ı Express ile entegre etmek için.
- graphql: GraphQL dili desteği için.
Bu paketleri terminalden şu komut ile yükleyebilirsiniz:
npm install express apollo-server-express graphql
Proje Yapısı
Proje dosyamızın adı server.js
olacak ve bu dosya API’mizin temel kodlarını içerecek.
Kod Açıklamaları
Aşağıdaki kod parçaları proje dosyamızı oluşturacak. Her bir bölümün ne yaptığını detaylandıracağız.
1. İlk Ayarlar ve Veriler
İlk olarak, gerekli kütüphaneleri import ediyoruz ve bellekte (in-memory) saklanan bir ürün listesi oluşturuyoruz:
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// In-memory data
const products = [];
products dizisi, yeni eklenen ürünleri saklamak için kullanılacak basit bir veri deposudur.
2. GraphQL Schema Tanımı
GraphQL’de veri yapılarını ve sorguları tanımlamak için bir şema (schema) kullanırız. Aşağıdaki kod şemamızı tanımlar:
const typeDefs = gql`
type Product {
id: ID!
name: String!
price: Float!
description: String
category: String
stock: Int
}
type Query {
products: [Product]
}
input ProductInput {
name: String!
price: Float!
description: String
category: String
stock: Int
}
type Mutation {
addProduct(product: ProductInput!): Product
}
`;
Product
: ürün modelimizi tanımlar.id
: Ürün kimliği.name
: Ürün adı.price
: Ürün fiyatı.description
,category
,stock
: Opsiyonel özellikler.
Query
: Ürün listesini döndürmek için sorgu.ProductInput
: Yeni ürün eklerken kullanılacak girdi tipi.Mutation
: Yeni bir ürün ekleme işlemini tanımlar.
3. Resolver Fonksiyonları
Resolvers, GraphQL sorgularının ve mutasyonlarının nasıl çalışacağını belirler:
const resolvers = {
Query: {
products: () => products,
},
Mutation: {
addProduct: (_, { product }) => {
const newProduct = {
id: products.length + 1,
...product,
};
products.push(newProduct);
return newProduct;
},
},
};
- Query:
products
: Tüm ürün listesini döndürür.
- Mutation:
addProduct
: Gelenproduct
nesnesini alır, bir kimlik (id
) atar ve listeye ekler.
4. Sunucu Başlatma
Apollo Server’ı Express ile birleştirerek sunucuyu çalıştırıyoruz:
const startServer = async () => {
const app = express();
const server = new ApolloServer({ typeDefs, resolvers });
await server.start();
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () =>
console.log(`Server ready at http://localhost:4000${server.graphqlPath}`)
);
};
startServer();
Bu kod parçası:
- Apollo Server’ı başlatır.
- Express uygulamasına GraphQL middleware’ini uygular.
- Sunucuyu 4000 portunda dinlemeye başlar.
API Kullanımı
GraphQL Playground
Sunucuyu çalıştırdıktan sonra tarayıcınızda http://localhost:4000/graphql
adresine giderek GraphQL Playground’u kullanabilirsiniz.
Sorgu ve Mutasyon Örnekleri
Ürün Listeleme
query {
products {
id
name
price
description
category
stock
}
}
Ürün Ekleme
mutation {
addProduct(product: {
name: "Laptop",
price: 1500.00,
description: "High-end gaming laptop",
category: "Electronics",
stock: 10
}) {
id
name
price
description
category
stock
}
}
Bu mutasyonu çalıştırdığınızda yeni bir ürün listeye eklenecektir.
Bu yazıda, Express ve Apollo Server kullanarak basit bir GraphQL API’ını nasıl oluşturabileceğimizi gördük. Bu API’ı geliştirerek veri tabanı entegrasyonu (MongoDB, PostgreSQL vb.), kimlik doğrulama veya daha karmaşık sorgular ekleyebilirsiniz.