 (31).png)
Merhaba arkadaşlar, bugün sizlerle Laravel'de GraphQL kullanımını detaylı şekilde inceleyeceğiz. REST API'lerin sınırlarını aşmak ve daha esnek bir API yapısı kurmak istiyorsanız, GraphQL tam size göre. Laravel ile nasıl güçlü GraphQL API'leri geliştirebileceğinizi adım adım anlatıyorum.
GraphQL, Facebook tarafından geliştirilen bir sorgu dilidir. Avantajları:
Laravel ile GraphQL mükemmel uyum sağlar çünkü:
composer require nuwave/lighthouse
Temel yapılandırma:
php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider"
graphql/schema.graphql dosyasını düzenleyelim:
type Query {
users: [User!]! @all
user(id: ID! @eq): User @find
}
type User {
id: ID!
name: String!
email: String!
created_at: String!
updated_at: String!
}
Bu basit şema:
1. Tüm kullanıcıları çekme:
query {
users {
id
name
email
}
}
2. Belirli bir kullanıcıyı getirme:
query {
user(id: 1) {
name
email
}
}
3. İlişkili verileri çekme (Post-User ilişkisi):
type User {
posts: [Post!]! @hasMany
}
query {
users {
name
posts {
title
content
}
}
}
Veri ekleme/güncelleme örneği:
type Mutation {
createUser(
name: String! @rules(apply: ["required", "min:3"])
email: String! @rules(apply: ["email", "unique:users"])
password: String! @rules(apply: ["min:6"])
): User @create
}
Kullanımı:
mutation {
createUser(
name: "Ahmet Yılmaz"
email: "ahmet@example.com"
password: "sifre123"
) {
id
name
}
}
1. N+1 Problemini Çözme:
type User {
posts: [Post!]! @hasMany @withCount
}
query {
users {
name
posts_count
}
}
2. Pagination (Sayfalama):
type Query {
posts(
page: Int @paginate
): [Post!]! @paginate(type: "paginator" model: "App\\Models\\Post")
}
1. Yetkilendirme:
type Mutation {
deletePost(id: ID!): Post @delete @can(ability: "delete", model: "App\\Models\\Post")
}
2. Doğrulama Kuralları:
type Mutation {
updateUser(
id: ID!
name: String @rules(apply: ["min:3"])
email: String @rules(apply: ["email", "unique:users,email,{{id}}"])
): User @update
}
php artisan lighthouse:directive --field CustomFormat
namespace App\GraphQL\Directives;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
class CustomFormatDirective extends BaseDirective
{
public function handle($value, $args)
{
return strtoupper($value);
}
}
Kullanımı:
type User {
name: String! @customFormat
}
Laravel ile GraphQL kullanarak modern, esnek ve yüksek performanslı API'ler geliştirebilirsiniz. Lighthouse paketi sayesinde GraphQL'in tüm gücünü Laravel ekosisteminde kullanabilirsiniz.Bir sonraki yazımızda Laravel'de Unit Test ve Feature Test Yazma Rehberi konusunu ele alacağız. Görüşmek üzere!