Skip to content

πŸ† Best Practices ​

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ИспользованиС middleware для прСобразования Π΄Π°Π½Π½Ρ‹Ρ… ​

ts
import { HttpClient } from "requestify.js";

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ экзСмпляр ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ URL
const $api = new HttpClient({
  baseUrl: "https://jsonplaceholder.typicode.com",
})
  // Middleware для автоматичСского прСобразования ΠΎΡ‚Π²Π΅Ρ‚Π° Π² JSON
  .registerMiddleware({
    name: "json",
    after: async (res: Response) => {
      return res.json() as Promise<unknown>;
    },
  })
  // Middleware для прСобразования ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ· snake_case Π² camelCase
  .registerMiddleware({
    name: "camelCase",
    after: (data: unknown) =>
      snakeToCamelCase(data as Record<string, any>) as unknown,
  })
  // Middleware для структурирования ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΊΠ°ΠΊ Ρƒ axios
  .registerMiddleware({
    name: "axios data structured",
    after: (data) => {
      return { data, ok: true };
    },
  });

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с автоматичСским ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ структуры Π΄Π°Π½Π½Ρ‹Ρ…
const response = await $api.get<{ data: UserCamel[]; ok: boolean }>("/users");

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ middleware ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
$api.removeMiddleware("axios data structured");

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ registerMiddleware для поэтапной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  • Для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ copy().
  • УдаляйтС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ middleware с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ removeMiddleware.
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для вас Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прямо Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ middleware.

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ middleware ​

Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ бСзопасности Ρ‚ΠΈΠΏΠΎΠ² ΠΈ удобства автодополнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ defineMiddleware:

ts
import { defineMiddleware } from "../src/utility";

// РСкомСндуСтся ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ имя middleware Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ константу
const AUTO_JSON_MIDDLEWARE = "autoJson";

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€: middleware, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π² JSON
const autoJson = defineMiddleware<Response, unknown>({
  name: AUTO_JSON_MIDDLEWARE,
  after: async (res) => res.json(),
});

// ИспользованиС с HttpClient
const client = new HttpClient().registerMiddleware(autoJson);

const result = await client.get<unknown>("https://example.com/data");
// result Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ распарсСнныС JSON-Π΄Π°Π½Π½Ρ‹Π΅

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ middleware ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
client.removeMiddleware(AUTO_JSON_MIDDLEWARE);

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Явная типизация Π²Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° middleware
  • IDE подсказываСт Ρ‚ΠΈΠΏΡ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ
  • МСньшС ошибок ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π£Π΄ΠΎΠ±Π½ΠΎ ΠΈ бСзопасно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ middleware ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, избСгая ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ