Методы проектирования на основе API: REST, GraphQL и gRPC с примерами кода

«Проектирование на основе API» относится к подходу к разработке программного обеспечения, при котором дизайн и архитектура приложения в первую очередь ориентированы на эффективное и действенное использование API (интерфейсов прикладного программирования) для обеспечения связи и обмена данными между различными компонентами программного обеспечения. или системы. Такой подход к проектированию обеспечивает модульность, масштабируемость и возможность повторного использования за счет использования возможностей API.

Вот несколько методов, обычно используемых при проектировании на основе API, а также примеры кода:

  1. API-интерфейсы RESTful:
    REST (передача репрезентативного состояния) — это широко распространенный архитектурный стиль для разработки сетевых приложений. Он использует методы HTTP, такие как GET, POST, PUT и DELETE, для выполнения операций с ресурсами, предоставляемыми API. Вот пример в Node.js с использованием платформы Express:
const express = require('express');
const app = express();
// GET request handler
app.get('/api/users', (req, res) => {
  // Retrieve and return user data
  const users = ['John', 'Jane', 'Alice'];
  res.json(users);
});
// POST request handler
app.post('/api/users', (req, res) => {
  // Create a new user
  // ...
  res.sendStatus(201);
});
// Start the server
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});
  1. GraphQL:
    GraphQL — это альтернатива RESTful API, которая позволяет клиентам запрашивать определенные структуры данных и уменьшать чрезмерную или недостаточную выборку данных. Он обеспечивает гибкий и эффективный способ запроса и манипулирования данными. Вот пример в Node.js с использованием сервера Apollo:
const { ApolloServer, gql } = require('apollo-server');
// GraphQL schema
const typeDefs = gql`
  type Query {
    users: [String]
  }
  type Mutation {
    createUser(name: String): Boolean
  }
`;
// GraphQL resolver
const resolvers = {
  Query: {
    users: () => ['John', 'Jane', 'Alice'],
  },
  Mutation: {
    createUser: (parent, args) => {
      // Create a new user
      // ...
      return true;
    },
  },
};
// Create an Apollo Server
const server = new ApolloServer({ typeDefs, resolvers });
// Start the server
server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});
  1. gRPC:
    gRPC — это высокопроизводительная платформа с открытым исходным кодом, разработанная Google, которая позволяет определять сервисы с использованием протокольных буферов и генерировать эффективный клиентский и серверный код. Он поддерживает различные языки программирования. Вот пример использования Node.js и библиотеки gRPC:
// Example.proto
syntax = "proto3";
package example;
service UserService {
  rpc GetUser(GetUserRequest) returns (UserResponse) {}
  rpc CreateUser(CreateUserRequest) returns (UserResponse) {}
}
message GetUserRequest {
  string userId = 1;
}
message CreateUserRequest {
  string name = 1;
}
message UserResponse {
  string name = 1;
}
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
// Load the protobuf definition
const packageDefinition = protoLoader.loadSync('Example.proto', {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true,
});
// Load the gRPC package
const example = grpc.loadPackageDefinition(packageDefinition).example;
// Create a gRPC client
const client = new example.UserService('localhost:50051', grpc.credentials.createInsecure());
// gRPC method for getting a user
const getUser = (userId) => {
  client.GetUser({ userId }, (err, response) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(response);
  });
};
// gRPC method for creating a user
const createUser = (name) => {
  client.CreateUser({ name }, (err, response) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(response);
  });
};
// Usage
getUser('123');
createUser('John Doe');

Это всего лишь несколько методов, которые можно использовать при проектировании на основе API. Другие подходы включают API-интерфейсы SOAP, архитектуры, управляемые событиями, и многое другое. Выбор метода зависит от конкретных требований и ограничений вашего проекта.