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!