API server

Занятие 10

Профессия
Node.js & React.js developer
продвинутый курс

1

  • Express.js
  • Версионирование API
  • Документирование API
  • Примеры
  • План дальнейшей работы

План

2

Express.js

Express.js

LSK Middlewares

3

Версионирование API

Для чего нужны версии?

Стабильность фронта

Новые возможности

Фикс старых багов

Как называть версии

  • /api/v1
  • /api/v2
  • /api/v3
  • /api/v1
  • /api/v1.1
  • /api/v1.2
  • /api/v2
  • /api/v2.1
  • /api/users
  • /api/user2
  • /api/usersnew
  • /api/ios/v1/users
  • /api/web/users
  • /api/android/v2/users

Как я версионирую

  • /api/v1
  • /api/v2
  • /api/v3
  • /api/modules/chat
  • /api/modules/auth/v1
  • /api/modules/auth/v2

Mobile API

 

необходимо поддерживать как минимум 3 версии API

Уровни версионирования

  • Версионирование на уровне
    Proxy (Nginx, Load Balancer)

  • Версионирование на уровне Node.js 

  • Версионирование на уровне Express Router

  • Версионирование на уровне Моделей

 

Nginx

версионирование

server {
  server_name lsk.mgbeta.ru;
  listen 80;
  ...

  location /api/v1 {
    proxy_pass  http://127.0.0.1:8039;
    include /projects/.nginx/proxy.conf;
  }

  location /api/v2 {
    proxy_pass  http://127.0.0.1:8040;
    include /projects/.nginx/proxy.conf;
  }

  location / {
    proxy_pass  http://127.0.0.1:8038;
    include /projects/.nginx/proxy.conf;
  }
}

Express Router

версионирование

// App.server.js
this.app.use('/api/v1', this.getDocsRouter(getDocsV1));
this.app.use('/api/v1', getApi(this));
this.app.use('/api/v2', this.getDocsRouter(getDocsV2));
this.app.use('/api/v2', getApiV2(this));
this.app.use('/api/v3', this.getDocsRouter(getDocsV3));
this.app.use('/api/v3', getApiV3(this));


// /api/v2/index.js
const apiV1 = getApiV1(ctx, params);
const api = asyncRouter();
api.use('/requests', getRequestApi(ctx));
api.use('/profiles', getProfileApi(ctx));
...
api.use(apiV1);
return api;

Версионирование на уровне моделей

Пару мыслей

Как слать параметры?

  • /api/me?token=
  • /api/me + COOKIES
  • /api/me + Header
  • /api/users?gender=female
  • /api/users + POST {gender:'female'}

Not RESTful?

  • /api/users/12
  • /api/users/get?id=12
  • /api/users/12/pets/23
  • /api/users/pets?userId=12&petId=23
fetch(
  `/api/v1/users/${userId}/pets/${petId}?foodSort=asc`, 
  { body: {filter: ... } 
})

api.post('/api/v1/users/:userId/pets/:petId'), (req) => {
  req.params.userId;
  req.params.petsId;
  req.query;
  req.body.filter;
})

Not RESTful?

  • /api/users/list  ALL
  • /api/users/one  ALL
  • /api/users/edit  POST
  • /api/users/create  POST
  • /api/users/remove  POST

Проблемы наследования

при версионировании 

  • Миграции БД
  • Модели
  • Роуты
  • Форматы ответов и запросов
  • Документация

Как отлаживать сервер API для мобильных приложений

ИНСАЙД

​Какие варианты?

  1. На продакшене все отлаживать
  2. Попросить фронтовика - сменить BaseURL
  3. Попросить фронтовика - сделать смену в настройках
  4. На продакшене при условиях проксировать на дев
  5. Подменить HOSTS на устройстве
  6. В роутере сменить DNS на локальный

Как отлаживать сервер API для мобильных приложений

ИНСАЙД

  1. Поднять локальный DNS
  2. На нужные домены раздавать нужные IP
  3. На другие домены проксировать DNS
  4. В роутере сменить DNS на локальный

4

 Документирование API

VS

Based on:

apiblueprint.org

Swagger

2.0 2014-09-08 Release of Swagger 2.0
1.0 2011-08-10 First release of the Swagger Specification

Swagger web client

Postman

5

Попрактикуемся

6

Какой план?

  1. Бекэнд ветка: lsk-example3
  2. Задачи по бекэнду в ЛК
  3. Модульный LSK, как работать с модулями?
  4. Созвон с командами
  5. Набираем новую команду
  6. Список команд и задач: тут

Какой план?

Игорь Суворов

Thanks!

any questions?

программист-предприниматель

Made with Slides.com