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

Сравнение подходов

КритерийRESTGraphQL
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!
}