Пространство имен Universe.Platform.Network предоставляет базовые классы и интерфейсы для выполнения HTTP-запросов в SDK. Здесь определены основные операции для работы с данными через HTTP протокол, включая загрузку одиночных моделей, списков, файлов и выполнение запросов удаления.
Операции являются фундаментальными классами для работы с HTTP-запросами, преднастроенными для взаимодействия с бэкендом системы. Они предоставляют стандартный интерфейс и основную функциональность для различных типов сетевых взаимодействий. На основе этих операций разработчики могут создавать собственные специализированные операции для запроса и модификации данных при добавлении нового функционала в серверную часть системы.
Universe.Platform.Network.BaseHttpOp — низкоуровневая операция сетевых запросов, от которой наследуются специализированные классы для разных типов запросов.
Пример операции:
class UploadFileOp extends Universe.Platform.Network.BaseHttpOp {
protected override config: Universe.Platform.Network.IOpConfig = {
url: '/example/upload/',
method: 'post',
model: undefined,
rootProperty: ''
};
constructor (file: File) {
super();
const data = new FormData();
data.append('file', file);
this.config.data = data;
}
}
Universe.Platform.Network.FileHttpOp — операция для загрузки и скачивания файлов.
Типичные случаи использования:
Пример операции:
export class DownloadFileOp extends Universe.Platform.Network.FileHttpOp {
constructor () {
super();
this.config.url = '/example/download';
}
}
Universe.Platform.Network.ModelHttpOp — операция для загрузки одиночной модели данных. Используется для получения данных конкретной сущности.
Типичные случаи использования:
Пример запроса:
GET /universe-backend/api/example/product/1 HTTP/1.1
Host: localhost:8080
Пример ответа:
{
"id": 1,
"name": "Product name 1",
"price": 100
}
Структура данных:
class Product extends Universe.Platform.Model.AbstractModel {
@Universe.Platform.Model.numberField()
public id: Universe.Platform.Model.NumberField;
@Universe.Platform.Model.stringField()
public name: Universe.Platform.Model.StringField;
@Universe.Platform.Model.numberField()
public price: Universe.Platform.Model.NumberField;
}
Операция для запроса:
export class ReadProductOp extends Universe.Platform.Network.ModelHttpOp<
Product,
never,
Universe.Platform.Model.SerializedType<Product>
> {
protected override config: Universe.Platform.Network.IOpConfig<Product, never> = {
url: '/example/product/{{id}}',
method: 'get',
model: Product,
rootProperty: ''
};
constructor (id: number) {
super();
this.urlContext = {id};
}
}
Обработка запроса:
// Создать операцию
const id = 1;
const operation = new ReadProductListOp(id);
// Выполнить запрос
const product = await operation.execute();
console.log(product.name.getValue()); // 'Product name 1'
Universe.Platform.Network.ModelListHttpOp — операция для загрузки простых списков моделей. Возвращает массив объектов без пагинации. Подходит для загрузки относительно небольших наборов данных, когда не требуется постраничная загрузка.
Типичные случаи использования:
Пример запроса:
GET /universe-backend/api/example/product/list HTTP/1.1
Host: localhost:8080
Пример ответа:
[
{id: 1, "name": "Product name 1", "price": 100},
{id: 2, "name": "Product name 2", "price": 500}
// ... Other items ...
]
Модель данных сущности:
class Product extends Universe.Platform.Model.AbstractModel {
@Universe.Platform.Model.numberField()
public id: Universe.Platform.Model.NumberField;
@Universe.Platform.Model.stringField()
public name: Universe.Platform.Model.StringField;
@Universe.Platform.Model.numberField()
public price: Universe.Platform.Model.NumberField;
}
Операция для запроса:
export class ReadProductListOp extends Universe.Platform.Network.ModelListHttpOp<
Product,
never,
Universe.Platform.Model.SerializedType<Product>
> {
protected override config: Universe.Platform.Network.IOpConfig<Product, never> = {
url: '/example/product/list',
method: 'get',
model: Product,
rootProperty: ''
};
}
Обработка запроса:
// Создать операцию
const operation = new ReadProductListOp();
// Выполнить запрос
const products = await operation.execute();
// Результат - массив инициализированных и заполненных данными моделей
console.log(products[0].name.getValue()); // 'Product name 1'
Universe.Platform.Network.ModelListPaginatedHttpOp — операция для загрузки списка моделей с постраничным разбиением. Используется в случаях, когда необходимо загружать большие списки данных частями, указывая смещение (offset) и количество записей на странице (limit).
В отличие от Universe.Platform.Network.ModelListHttpOp, данная операция ожидает от сервера ответ в формате:
type PaginatedResponse<Model> = {
// массив записей на текущей странице
items: SerializedType<Model>[],
// общее количество записей, доступных для загрузки
total: number
}
Типичные случаи использования:
Пример запроса:
GET /universe-backend/api/example/product/list?limit=10&offset=0 HTTP/1.1
Host: localhost:8080
Пример ответа:
{
"items": [
{id: 1, "name": "Product name 1", "price": 100},
{id: 2, "name": "Product name 2", "price": 500}
// ... Other 8 items ...
],
"total": 40
}
Модель данных сущности:
class Product extends Universe.Platform.Model.AbstractModel {
@Universe.Platform.Model.numberField()
public id: Universe.Platform.Model.NumberField;
@Universe.Platform.Model.stringField()
public name: Universe.Platform.Model.StringField;
@Universe.Platform.Model.numberField()
public price: Universe.Platform.Model.NumberField;
}
Операция для запроса:
export class ReadProductListOp extends Universe.Platform.Network.ModelListPaginatedHttpOp<
Product,
Universe.Platform.Network.PaginationParams,
Universe.Platform.Network.PaginatedResponse<Product>
> {
protected override config: Universe.Platform.Network.IOpConfig<Product> = {
url: '/example/product/list',
method: 'get',
model: Product,
rootProperty: ''
};
constructor (params: Universe.Platform.Network.PaginationParams) {
super();
this.config.params = params;
}
}
Обработка запроса:
// Создать операцию
const operation = new ReadProductListOp({limit: 10, offset: 0});
// Выполнить запрос
const {total, items} = await operation.execute();
console.log(total); // 40
console.log(items.length); // 10
console.log(items[0].name.getValue()); // 'Product name 1'
Universe.Platform.Network.DeleteHttpOp - операция для отправки запросов удаления.
Пример запроса:
DELETE /universe-backend/api/example/product/1 HTTP/1.1
Host: localhost:8080
Операция для запроса:
export class DeleteProductOp extends Universe.Platform.Network.DeleteHttpOp {
constructor (id: number) {
super();
this.config.url = '/example/product/{{id}}';
this.urlContext = {id};
}
}
Обработка запроса:
// Создать операцию
const id = 1;
const operation = new DeleteProductListOp(id);
// Выполнить запрос
await operation.execute();
Universe.Platform.Network.ServerUrlManager — утилита для работы с URL-адресами серверной части приложения. Предоставляет централизованное управление базовыми URL и версиями API для формирования корректных адресов запросов.
Universe.Platform.Network.ServerUrlManager.getBaseUrl — Получить базовый URL бэкенда:
const baseUrl = Universe.Platform.Network.ServerUrlManager.getBaseUrl();
console.log(baseUrl); // 'http://localhost:8080/universe-backend/api/'
Universe.Platform.Network.ServerUrlManager.buildUrl — Сформировать полный URL:
// относительный путь (endpoint) запроса
const postUrl = 'example/product/1';
const url1 = Universe.Platform.Network.ServerUrlManager.buildUrl(postUrl);
console.log(url1); // 'http://localhost:8080/universe-backend/api/v2/example/product/1'
// Необязательная версия API (по умолчанию используется текущая)
const apiVersion = 'v1';
const url2 = Universe.Platform.Network.ServerUrlManager.buildUrl(postUrl, apiVersion);
console.log(url2); // 'http://localhost:8080/universe-backend/api/v1/example/product/1'
Universe.Platform.Network.ServerUrlManager.getApiVersion — Получить текущую используемую версию API:
const apiVersion = Universe.Platform.Network.ServerUrlManager.getApiVersion();
console.log(apiVersion); // 'v2'