Рубрики
Без рубрики

Новый подход к созданию API

Я хотел поставить очень простой вопрос на столе; Может быть, есть новый подход для создания API … Теги с узлом, программированием, JavaScript.

Я хотел поставить очень Простой вопрос на столе;

Может быть, есть новый подход для создания API быстрее?

Классический путь

Обычно мы используем некоторые рамки для создания API, даже если они на самом деле MVC Frameworks. Или, если вы являетесь разработчиком Node.js, вы можете начать с простого экспресс-сервера. Мы можем выбрать много разных библиотек и инструментов. Но у нас есть две разные задачи при разработке API; Реализация бизнес-логики и кодировка тех же вещей снова и снова.

После многих лет я спросил себя, что могу ли я создать надежную структуру, которая обрабатывает все общие функции для API. Я имею в виду, другой путь или метод …

То же самое и разные вещи

Давайте подумаем о API, которые вы были созданы в вашей карьере. Возможно, у них есть некоторые общие узоры. По крайней мере, объект-юридическое лицо – должно иметь базовые действия CRUD. Кроме того, я уверен, что где-то вам нужен некоторая функция расширенного запроса на этом объекте. Но это не просто это. Есть несколько шаблонов дизайна для использования на проектах API. Мы пытаемся реализовать их все возможное, чтобы мы могли иметь хорошие, твердые API.

Тем не менее, никто не будет использовать то же API, потому что у нас разная деловая логика. Итак, мы должны поставить точку останова где-то разделить бизнес-логику и общие функции.

После этих мыслей я придумал идею, которую я работаю в настоящее время.

Определите первым

Давайте подумаем о пользователе. Для этого существу вы можете захотеть разные вещи. Например, вы можете захотеть следующие функции;

  • Создание простого Crud
  • Разрешение только определенных полей для создания и обновления запросов.
  • Используя некоторые проверки формы, чтобы убедиться, что пользователь отправил правильные данные.
  • Сокрытие некоторых секретных данных от пользователя, такого как пароль хеша.
  • Разработка расширенных функций запроса.
  • Применение некоторой специальной бизнес-логики к процессу создания.
  • и т.п.

Вы можете добавить больше вещей в этот список, но было бы достаточно, чтобы понять мою идею. Чтобы создать API для объекта пользователя, давайте создадим файл модели.

class User {
  get fillable() {
    return ["email", "name"];
  }

  get validations() {
    return {
      email: "required|email",
      name: "required",
    };
  }
}

Это не модель ORM. Это просто определение того, что мы хотим в качестве функций по умолчанию. Что если после того, как вы создадите эту модель, вы можете получить полностью работающие API, только по вашему определению?

Ну, я долго работаю, чтобы создать что-то вроде этого. Это имя AX API Новый способ быстро создавать отдых API быстро.

AX API ожидает определения модели от вас. AX API Обеспечивает надежную работу, работающую API, когда вы определяете модели с такими функциями, такими как правила валидации, заполняемые поля, выбранные обработчики (CRUD), отношения между собой. Но не только это. Он предоставляет вам много упорных точек для реализации вашей бизнес-логики на каждом шаге HTTP-запроса. В результате магии вы можете иметь очень расширенные функции запроса для каждой модели, которую у вас есть.

Начиная

Давайте посмотрим ближе и подумайте о простой модели, как это;

import { Model } from "axe-api";

class User extends Model {
}

export default User;

Поздравляю. Вы создали свой API! Это легко, верно? Теперь у вас есть основные запросы CRUD.

Но давайте добавим больше функций. Давайте выберем, какие поля будут заполнены пользователями.

class User extends Model {
  get fillable() {
    return {
      POST: ["email", "name"],
      PUT: ["name"],
    };
  }
}

Мы не просто выбирали, какие поля заполняются. Мы также выбрали, какие поля заполняются, в которых HTTP-запросы. Ваши запросы на создание и обновление сейчас безопасны.

Давайте еще наступим еще один шаг и добавьте правила проверки формы для создания.

class User extends Model {
  get fillable() {
    return {
      POST: ["email", "name"],
      PUT: ["name"],
    };
  }

  get validations() {
    return {
      email: "required|email",
      name: "required|max:50",
    };
  }
}

Вот и все. Пользователи должны отправлять правильные данные.

Но сейчас пора думать глубже. Что, если у вас есть две связанные модели, такие как пользователи и сообщения. Давайте связываем их вместе в определении модели.

class User extends Model {
  posts() {
    return this.hasMany("Post", "id", "user_id");
  }
}

class Post extends Model {
  user() {
    return this.belongsTo("User", "user_id", "id");
  }
}

После этого определения AX API создаст для вас все связанные маршруты. Можете ли вы поверить, что у вас будет следующие маршруты автоматически?

  • Получить API/пользователей
  • Post API/пользователи
  • Получить API/пользователей/: ID
  • Поместите API/пользователей/: ID
  • Удалить API/Пользователи/: ID
  • Получить API/Пользователи/: USEDID/Посты
  • Post API/Пользователи/: MakeId/Посты
  • Получить API/пользователи/: USEDID/посты/: ID
  • Поместите API/Пользователи/: USEDID/Посты/: ID
  • Удалить API/Пользователи/: USEDID/Сообщения/: ID

Бизнес-логика

Вероятно, я слышу, как вы говорите, что «Да, это выглядит хорошо, но у нас есть разные виды логики. Например, в создании пользователя я должен быть в состоянии солить пароль ».

Но то, что вы не знаете, это AX API обеспечивает крючки для каждого уровня HTTP-запроса. Давайте создадим Userhooks.js файл для такой модели;

import bcrypt from "bcrypt";

const onBeforeInsert = async ({ formData }) => {
  // Genering salt
  formData.salt = bcrypt.genSaltSync(10);
  // Hashing the password
  formData.password = bcrypt.hashSync(formData.password, salt);
};

export { onBeforeInsert };

Эта функция будет запущена AX API перед процессом создания. Но не только это. AX API предоставляет вам все следующие крючки;

  • onbeforeinsert.
  • onbeforeupdate запрос
  • OnbeforeUpdate.
  • onbeforeleteequery
  • Onbeforeletelete.
  • onbeforepag
  • onbeforeshow
  • onafterinsert.
  • OnafterupdateQuery
  • onafterupdate.
  • onafterdeleteQuery
  • onafterdelete.
  • onafterpagatine.
  • onattershow.

Особенности расширенного запроса

Я сказал, что вы можете иметь много преимуществ, чтобы создать такую структуру. Например; Расширенные запросы. Как только вы определите свою модель, это будет готово к запроси. Вы можете отправить запрос, как следующий;

GET /api/users
  ?q=[[{"name": "John"}],[{"$or.age.$gt": 18}, {"$and.id": 666 }]]
  &fields:id,name,surname
  &sort=surname,-name
  &with=posts{comments{id|content}}
  &page=2
  &per_page=25

С этим запросом вы спрашиваете следующие вещи;

  • Получите данные, если Имя это «Джон» или возраст больше 18 и я D 666.
  • Возвращает только ID , Имя и Фамилия поля.
  • Сортировать по Фамилия Сначала (ASC), Имя Во-вторых (Desc).
  • Получить связанные Сообщения Данные, со связанными Комментарии данные. Но в Комментарии Объект, просто привлечь ID и Содержание поля.
  • Fetch 25 ряд на страницу.
  • Получить 2 страницы.

Всякий раз, когда вы создаете модель, вы можете иметь эти функции расширенного запроса. Вы не можете сказать вам, не понравилось!

Что следующее?

Ну, есть еще много особенностей, которые я могу говорить об этом. Но я не стремимся создать другую документацию об этом, потому что я уже сделал. Пожалуйста, посетите AX API Документация страница. Вы можете найти много подробностей о проекте.

Я прошу обратной связи от всех, кто должен сказать. Всякий раз, когда я думаю о проекте, это делает меня так взволнованным из-за его потенциала. Я надеюсь, что у вас могут быть те же чувства.

Также, пожалуйста, имейте в виду, что AX API Не готов к использованию в производстве, и он находится на бета-этапе.

Вы можете звездить проект на Github И получите уведомления о новостях.

Спасибо за Крышка изображения

Оригинал: “https://dev.to/iozguradem/a-new-approach-to-create-apis-35h5”