Express ve Apollo Server ile GraphQL API Oluşturma

Posted by

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: Gelen product 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.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir