Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/profcomff/api-uilib
API wrappers, autogenerated from openapi.json files
https://github.com/profcomff/api-uilib
api library openapi typescript
Last synced: about 1 month ago
JSON representation
API wrappers, autogenerated from openapi.json files
- Host: GitHub
- URL: https://github.com/profcomff/api-uilib
- Owner: profcomff
- License: bsd-3-clause
- Created: 2024-07-18T16:22:31.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-09-29T14:35:02.000Z (about 2 months ago)
- Last Synced: 2024-10-01T06:43:00.987Z (about 2 months ago)
- Topics: api, library, openapi, typescript
- Language: TypeScript
- Homepage: https://npmjs.com/package/@profcomff/api-uilib
- Size: 81.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Схемы и клиент для взаимодействия с API Твой ФФ
Представляет интерфейс для совершения запросов к API по адресу .
Поддерживает типы данных TypeScript и подсветку синтаксиса.
[](https://easycode.profcomff.com/templates/docker-node/workspace?mode=manual¶m.Repository+URL=https://github.com/profcomff/api-uilib.git¶m.Working+directory=api-uilib)
## Использование
Установите библиотеку
```shell
pnpm install @profcomff/api-uilib
```Используйте для совершения запросов к и .
```ts
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"],
},
},
});
```## Тестирование
_На основе ._
```ts
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](https://github.com/profcomff/api-uilib/actions/workflows/autogen.yaml) для кодогенерации последней версии биндингов с **продового** API .
CI исполняется вручную по нажатии кнопки run workflow. После завершения исполнения новая версия будет доступна для ревью в виде Pull Request с названием "Automated API update".
### Релизный процесс
Библиотека релизится по созданию тега вида `v*`, где вместо звездочки идет описание версии [по правилам semver](https://semver.org/lang/ru/). Менять версию в `package.json` не нужно.