api-uilib

API wrappers, autogenerated from openapi.json files

BSD-3-CLAUSE License

Stars
0
Committers
1

Схемы и клиент для взаимодействия с API Твой ФФ

Представляет интерфейс для совершения запросов к API по адресу https://api.profcomff.com.

Поддерживает типы данных TypeScript и подсветку синтаксиса.

Использование

Установите библиотеку

pnpm install @profcomff/api-uilib

Используйте для совершения запросов к https://api.test.profcomff.com и https://api.profcomff.com.

import { createClient } from "@profcomff/api-uilib";

// Setup client with base API path
// You can use environment `import.meta.env.VITE_API_URL` for example
const apiClient = createClient("https://api.test.profcomff.com");

// Setup token for requests to API
// It is optional, only for routes with authention
setupAuth("myApiTokenHere");

// Make request
const me_with_scopes = await apiClient.GET("/auth/me", {
  params: {
    query: {
      info: ["session_scopes"],
    },
  },
});

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

На основе https://openapi-ts.dev/openapi-fetch/testing.

import { createTestClient } from "@profcomff/api-uilib";
import { http, HttpResponse } from 'msw';
import { afterEach, beforeAll, afterAll, expect, test } from 'vitest';
import { setupServer } from 'msw/node';

export const server = setupServer();

beforeAll(() => {
	server.listen({
		onUnhandledRequest: request => {
			throw new Error(`No request handler found for ${request.method} ${request.url}`);
		},
	});
});

afterEach(() => server.resetHandlers());
afterAll(() => server.close());

test('Get basic info from Auth API with hardload', async () => {
	const baseUrl = import.meta.env.VITE_API_URL;

	const rawData = {
		id: 1,
		email: '[email protected]',
	};

	server.use(http.get(`${baseUrl}/auth/user/1`, () => HttpResponse.json(rawData, { status: 200 })));
	const testClient = createTestClient({ baseUrl });  // Клиент API должен быть инициализирован ПОСЛЕ msw сервера

	const { data, error } = await testClient
        .GET(
            '/auth/user/{user_id}',
            { params: { path: { user_id: this.id } },
        });
    expect(data).toEqual(rawData);
    expect(error).toBeUndefined();
});

Разработка

Автоматическая генерация

Используйте команду pnpm generate или CI-пайплайн Autogen API bindings для кодогенерации последней версии биндингов с продового API https://api.profcomff.com.

CI исполняется вручную по нажатии кнопки run workflow. После завершения исполнения новая версия будет доступна для ревью в виде Pull Request с названием "Automated API update".

Релизный процесс

Библиотека релизится по созданию тега вида v*, где вместо звездочки идет описание версии по правилам semver. Менять версию в package.json не нужно.

Related Projects