Реализация трех вызовов из документации по API (http, json)
25 000 руб. за проект
Реализовать пакет 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
---------------------------
Допускается использование дополнительных вспомогательных пакетов.
Срок: 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
---------------------------
Допускается использование дополнительных вспомогательных пакетов.
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.