API Technology
GraphQL: Modern API Query Language
Adi Nugroho
2025-04-10
6 Menit Baca
GraphQL adalah query language untuk APIs dan runtime untuk executing queries, developed by Facebook 2012, open-sourced 2015. Solves REST problems: over-fetching (getting unnecessary data), under-fetching (multiple requests needed), versioning issues. Core concepts: Schema (define data types dan relationships dengan SDL), Queries (read data), Mutations (write data), Subscriptions (real-time updates via WebSockets), Resolvers (functions yang fetch data). Type system: strongly typed, supports scalar types (Int, Float, String, Boolean, ID), object types, enums, interfaces, unions, input types. Schema definition: type definitions dengan fields, required fields (!), lists ([Type]), arguments. Queries: request exactly what you need, nested queries untuk related data, aliases untuk same field dengan different arguments, fragments untuk reusable selections, variables untuk dynamic queries. Mutations: create, update, delete operations, return updated data, can perform multiple mutations in single request. Subscriptions: WebSocket connection, real-time updates, use cases: chat apps, live notifications, collaborative editing. Server implementation: Apollo Server (Node.js, most popular), GraphQL Yoga, Express-GraphQL, Hasura (instant GraphQL on Postgres), AWS AppSync. Client libraries: Apollo Client (React, Angular, Vue), Relay (Facebook, optimized untuk React), URQL (lightweight alternative). Schema-first vs Code-first: schema-first (define SDL first, generate code), code-first (define in code, generate SDL). Resolvers: fetch data dari databases, REST APIs, other services, can be async, receive (parent, args, context, info). DataLoader: batch dan cache requests, solve N+1 query problem. Authentication: typically JWT in headers, context accessible in all resolvers. Authorization: field-level permissions, directive-based (@auth), resolver-level checks. Error handling: errors array in response, can include partial data, use custom error types. Caching: client-side caching (Apollo cache, normalized), server-side dengan Redis. Performance: query complexity analysis, depth limiting, rate limiting, persisted queries (send query ID instead of full query). Pagination: cursor-based (Relay spec), offset-based, connection pattern. File uploads: multipart requests, handle via GraphQL Multipart Request spec. Tooling: GraphiQL, GraphQL Playground (interactive IDE), GraphQL Voyager (visualize schema), Apollo Studio (monitoring, analytics). Testing: integration tests untuk resolvers, schema validation, automated testing dengan tools. Monitoring: track query performance, identify slow resolvers, error tracking. Versioning: typically avoided (just add new fields), deprecation for old fields. REST vs GraphQL: GraphQL better untuk complex data requirements, mobile apps (reduce requests), when frontend teams need flexibility. REST better untuk simple CRUD, file uploads/downloads, caching requirements. Adoption: GitHub, Shopify, Twitter, Facebook use GraphQL. Learning curve: moderate, requires mental shift dari REST. Federation: Apollo Federation enables microservices with unified graph. GraphQL revolutionizes API development dengan developer-friendly, efficient approach. Not silver bullet tapi powerful untuk modern applications.
Butuh Solusi IoT atau Smart Sensor?
Tim ahli teknis kami siap memberikan konsultasi gratis untuk proyek Anda.
Hubungi Kami