Go to file
ndiezel0 d6151187dc
OPS-259: Add ability to get ip address from header (#31)
* OPS-259: Add ability to get ip address from header

* Fix swag_server

* Add test

* Review fix
2023-03-24 12:04:17 +05:00
.github APM-286: Add new data to trx info (#25) 2023-01-19 12:45:07 +03:00
apps OPS-259: Add ability to get ip address from header (#31) 2023-03-24 12:04:17 +05:00
config TD-367: Drop retired APIs as of valitydev/swag-payments@37e6f46 (#20) 2022-09-05 13:22:16 +03:00
doc CAPI-23 Add initial project structure (#1) 2016-08-31 20:56:24 +03:00
.dockerignore TD-124: Setup CI/CD with GH Actions (#1) 2022-02-04 19:28:33 +03:00
.env TD-266: Change merch stat to magista proto (#14) 2022-07-18 15:48:02 +03:00
.gitignore TD-222: Reuse valitydev/action-deploy-docker@v2 (#16) 2022-07-18 19:20:03 +03:00
CONTRIBUTING.md TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
Dockerfile TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
Dockerfile.dev TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
elvis.config TD-288: Stop responding w/ payment tool tokens (#11) 2022-05-16 11:16:36 +03:00
LICENSE Update file(s) from valitydev/.github 2022-02-21 21:37:41 +00:00
Makefile TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
README.md TD-195: Remove old payment methods (#9) 2022-04-20 15:07:35 +03:00
rebar.config TD-367: Drop retired APIs as of valitydev/swag-payments@37e6f46 (#20) 2022-09-05 13:22:16 +03:00
rebar.lock OPS-259: Add ability to get ip address from header (#31) 2023-03-24 12:04:17 +05:00

capi

Сервис предоставляющий третьим сторонам REST API для доступа к нашим системам.

Сборка

Для запуска процесса сборки достаточно выполнить просто:

make

Чтобы запустить полученную сборку в режиме разработки и получить стандартный Erlang shell, нужно всего лишь:

make start

Хозяйке на заметку. При этом используется стандартный Erlang релиз, собранный при помощи relx в режиме разработчика.

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

Дальнейшую документацию можно почерпнуть, пройдясь по ссылкам в соответствующем документе.

Реализация идемпотентности запросов

Идемпотентность запросов создания/изменения сущностей обеспечивается специальной подсистемой, которая оперирует несколькими понятиями:

  • ExternalId - внешний идентификатор сущности.
  • Features - значимая часть данных запроса, изменение которых может появлиять на результат выполнения запроса.
  • Schema - рецепт как из полной структуры данных запроса получить Features.

В случае, когда в запросе фигурирует ExternalId, сервис будет обрабатывать запрос идемпотентно. Для структуры данных запроса существует Schema, по которой извлекается Features. Features ассоциируется с переданным ExternalId. При повторе запроса с таким же ExternalId код извлечет Features из новых данных и сравнит их с Features оригинального запроса, в случае совпадения сервис ответит идемпотентно, в противном случае сервис ответит ошибкой с кодом 409.

TODO

  • Вернуть передачу в hellgate контрактора, сразу как только там появятся интерфейс и бизнес-логика управления договорами
  • Ленивое создание мерчанта
  • Error Mapping
  • CORS (текущая версия не знает об операциях и авторизации, что в общем случае неприемлемо)
  • Тотальное логирование
  • При разбиению по месяцу в запросах статистики ответ приходит с разбиением по 30 дням, что не очевидно
  • В сгенеренном swagger коде в handle_request_json следует учесть, что ответ вида {false, Req1, State} невалиден и приводит к 500 ошибке
  • Перевести capi_mock_handler на thrift-чучела
  • Убрать cowlib в тестовые зависимости, когда сборщик сможет качать тестовые зависимости