Создать пакет Go/golang: клиента для API (http, JSON)

12 000 руб. за проект
14 ноября 2021, 18:09 • 5 откликов • 33 просмотра
Имеется API.
Имеется документация API.

API представляет собой 5 вызовов с использованием протокола http.
Форматы запроса-ответа:
form-encoded (для запроса), JSON для ответа.

Необходимо реализовать пакет для клиентского подключения к API.

Типичный пример из документации:
Request:
curl -i -X POST \
-H "Content-Type:application/x-www-form-urlencoded" \
-H "X-Signature: 123" \
-d "action=check" \
-d "user_id=123456" \
'https://example.org/api/v1/{system_name}/check/{ref_id}/'


Response:
{"user_id":"123456","user_exists":true,"user_info":{"name":"John","surname":"Do","email":"example
@mail.com"},"status":true}

Все 5 запросов API сопоставимы по сложности с примером выше или даже проще.
Документация по API предоставляется.

Требуется:
Создать пакет для языка программирования Go/golang для работы с этим API.

Приблизительный стиль реализации публичной части пакета:

type ApiAdaptor struct {
...}

func NewApiAdaptor(lg *zap.Logger, params string) *ApiAdaptor{
...
}

func (adaptor *ApiAdaptor)Check(param RequestParams) (ResponseParams, Raw) {
...
}

Кроме интепретированных/распарсенных/распознанных данных ответов API (в примере выше это ResponseParams) следует также возвращать дополинтельно сырые данные, так как они пришли по HTTP в структуре вида.

type Raw struct {
Err error
RequestUrl,
RequestMethod string
RequestBody []byte
ResponseStatus int
ResponseBody []byte
}

Требуется подробное логирование. Использовать для этого пакет https://pkg.go.dev/go.uber.org/zap
в режиме не Sugar.

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

l:= lg.Named("FuncName")
l.Info("Demo", zap.String("StringParam", stringValue), zap.Int("IntParam", intValue))
l.Error("Problem", zap.Error(err))


Для взаимодействия по HTTP и разбора JSON использовать пакеты стандартной/встроенной/базовой библиотеки Go/golang.

Обязательный код тестирования (встроенный средства Go/golang, рекомендуется использовать в качестве вспомогательного пакет https://github.com/stretchr/testify)


Оплата по безопасной сделке. Срок выполнения работы - 2 дня.

Формальная документация с описанием этого API будет предоставлена до начала работ.

Параметры для подключения к API для тестирования (токен и т.п.) предоставляются.

Тестирование необходимо выполнять с нашего сервера Linux (дадим доступ по SSH), так как API доступно только с определенных IP-адресов.

Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
 
~ 3 года назад
R50 54c55b916952b445bc9259473fbc0e28
Фрилансер
Совершенно адекватный заказчик. Было весьма подробное ТЗ, что встречается редко, а также своевременная реакция по возникавшим вопросам. Рекомендую.
~ 3 года назад