Как правильно написать класс для обращения к API?

Здравствуйте.
Представим какой-нибудь фронтенд проект (или любой необязательно фронтенд), где нужно общаться с API.
Нужно написать грамотный код для соблюдения чистоты.
Как лучше писать?

Так
class SomeAPI {
    constructor(baseUrl) {
        this.baseUrl = baseUrl;
    }

    products(method = "GET", params = {}, data = {}) {
        // return fetch(this.baseUrl)
        // fetch или axios и т.д.
    }

    users(method = "GET", params = {}, data = {}) {

    }

    endpoint1(/*...*/) {

    }

    endpoint2(/*...*/) {

    }

    endpointN(/*...*/) {

    }
}

const api = new SomeAPI("https://example.com/api/");
api.products("POST", /*и т.д.*/);


Или так
class SomeAPIEndpoint {
    constructor(endpoint) {
        this.url = `https://example.com/api/${url}`;
    }

    get(objectId, params) {}

    post(data) {}

    put(objectId, data) {}

    delete(objectId) {}
}

const productsApiEndpoint = new SomeAPIEndpoint("products");
productsApiEndpoint.post(/*data*/);


Или еще как-то?
  • Вопрос задан
  • 423 просмотра
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Нужно написать грамотный код для соблюдения чистоты.

Мантра, смысл которой вам, похоже, непонятен.
Грамотный код для API - это тот, которым удобно пользоваться и который несложно модифицировать при необходимости.
API - это архитектура "запрос-ответ". У вас есть определенные структуры данных, которые передаются в запросе, структуры данных, которые возвращаются в ответе, и логика получения вторых из первых.
Соответственно, если структуры данных достаточно сложны и имеют внутреннюю логику - стоит оформить их классами. Если логика достаточно сложна и слабо пересекается от запроса к запросу - можно создать классы-обработчики.
Но высасывать из пальца какую-то универсальную "чистоту", подходящую для любого API, что бы оно ни делало - просто бессмысленно.

Сравните, например, https://github.com/iamwildtuna/boxberry-sdk и https://github.com/dev-ik/ApiBoxberry
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Возьмите любой апи класс от популярных вендоров (фб, вк и тд) и посмотрите как у них организовано разделение пакета на классы. Обычно там 3-4 класса, все достаточно аккуратно и логично.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы