Реализация трех вызовов из документации по API (http, json)

25 000 руб. за проект
25 октября 2021, 13:18 • 2 отклика • 22 просмотра
Реализовать пакет Go/golang для использования API

Срок: 27 октября 2021 года, вечер

Http, JSON

Документация имеется.

Документация более обширна, чем нам необходимо.
Необходимо только 3 вызова из документации.

---------------------------

Структура файлов:

packetname - в этом каталоге go.mod, название пакета constantpos
packetname/native - в этом каталоге код для использования API
packetname/native/docs - документация к API в виде файла или в виде ссылок на документацию к API, размещенную на сайте;
указать там используемые вызовы (URL используемых методов API)

---------------------------

Логирование

Подробное логирование
Использовать пакет для логирования https://github.com/uber-go/zap
Использовать в режиме НЕ Sugar

Пример использования:

func MyFunc(lg *zap.Logger, param1 string) {

l:= lg.Named("MyFunc")

l = l.With(zap.String("param1", param1))
l.Info("Some text")

или же

l.Error("Some text", zap.String("param1", param1))

есть еще удобный способ для записи ошибок
l.Error("Unexpected", zap.Error(err))
где err переменная типа error
}

---------------------------

В дополнение к собственно ответам API - функции пакета дополнительно должны возвращать запрос/ответ и статусы http в "сыром виде".
Например, в структуре вида:

type Raw struct {
RequestUrl,
RequestMethod,
RequestBody string
ResponseStatus int
ResponseBody string
}

func DoCall(....) (......, Raw) {}

В этом ответе не должно быть секретной информации, типа паролей/токенов.
Если эта секретная информация есть, то маскировать эту секретную информацию так: "<***>".

P.S.:
Логирования недостаточно.
Информация, которую функция возвращает, пишется в БД.
Поэтому так надо.

---------------------------

Дубли

Функция, выполняющая вызов не должна делать дублирующихся фактических операций при многократных вызовах с тем же идентификатором операции.
То есть фактических операций с уникальным идентификатором (нашим идентификатором) должно быть не более 1 штуки, сколько бы раз мы не вызывали эту функцию.
Хочется надеяться, что API это позволяет учесть.

Убедиться в этом, на тестах на тестовом сервере.

Возможно, из API возвращаются разные результаты ответа, если это новый платеж или если мы пытаемся сделать дубликат платежа.


---------------------------

Если в момент выполнения операции http-сервер вернул невнятный ответ (например, сбой связи), то считаем, что операция была выполнена, но с непонятным статусом.
Это важно, так как мы не знаем когда именно был разрыв соединения - до отправки запроса или при получении ответа, то есть мы не знаем получил ли сервер запрос или нет.
Перестраховываемся. Считаем, что сервер запрос получил.

Всё равно статус мы проверим отдельным запросом и для таких сбоев и для нормальных бессбойных вызовов.

---------------------------

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

Для тестирования использовать пакет https://github.com/stretchr/testify желательно
Параметры для подключения НЕ хранить в исходных кодах
Параметры для подключения при тестировании передавать через переменные среды окружения

Например:

set PACKETNAME_PARAM1=1234
set PACKETNAME_PARAM2=23456
go test

---------------------------

Допускается использование дополнительных вспомогательных пакетов.

Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
 
2 года назад
R50 9fcaaa81e45308adcf629fe9582dc203
Фрилансер
 
2 года назад