API & GraphQL
REST API и GraphQL для построения современных приложений
API Playground
Query
Response
{
"data": {
"user": {
"name": "Hebrew",
"email": "hebrew@example.com",
"posts": [
{
"title": "GraphQL intro",
"content": "GraphQL is awesome!"
},
{
"title": "REST vs GraphQL",
"content": "Comparing approaches..."
}
]
}
}
}REST API
RESTful API использует HTTP методы (GET, POST, PUT, DELETE) для работы с ресурсами через URL endpoints.
- • Простота и понятность
- • Кэширование через HTTP
- • Stateless архитектура
- • Over-fetching/Under-fetching
GraphQL
GraphQL позволяет клиенту запрашивать только нужные данные через единый endpoint с гибким языком запросов.
- • Запрос только нужных полей
- • Единый endpoint для всех запросов
- • Строгая типизация схемы
- • Real-time через subscriptions
Сравнение подходов
| Критерий | REST | GraphQL |
|---|---|---|
| Endpoints | Множество (/users, /posts) | Один (/graphql) |
| Over-fetching | Возможен | Исключён |
| Версионирование | /api/v1, /api/v2 | Эволюция схемы |
| Кэширование | Простое (HTTP) | Сложнее |
GraphQL Schema пример
# schema.graphql
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
comments: [Comment!]!
}
type Comment {
id: ID!
text: String!
author: User!
}
type Query {
user(id: ID!): User
users: [User!]!
post(id: ID!): Post
posts(limit: Int): [Post!]!
}
type Mutation {
createUser(name: String!, email: String!): User!
createPost(title: String!, content: String!, authorId: ID!): Post!
deletePost(id: ID!): Boolean!
}