Это слой API платформы, к которому обращается внешняя система через запросы GET/POST.
Как проходит основной процесс входящего запроса:
Всегда лучше использовать коды для API только в нижнем регистре латиницей и без пробелов. Таким образом уменьшаются риски проблем с url rewrite неверных адресов
1. Вызываем по Get или Post метод авторизации /api/auth?username=&password={password}&output=json
2. Вызываем метод API
/api/action/getOrders?token=7285440B-BD32-405F-813D-C26DFED23DF5&catID=1
Передаем token, action (код метода) и произвольные параметры.
№ |
Код |
Описание ошибки |
1 |
100 |
Неверный токен |
2 |
101 |
Истекло время сессии |
3 |
102 |
Не найдена реализация метода АПИ (т.е. нет хранимой процедуры метода) |
4 |
103 |
Выполнение метода завершилось с ошибкой |
5 |
104 |
Имя/пароль неверные |
API создается следующим образом:
Оба эти параметра участвуют в формировании имени процедуры API. Код сущности определяет над каким объектом работаем, а код API задает действие, которое мы выполняем над этим объектом.
2. Создается хранимая процедура api_{entityCode}_{code}, которая реализует основную логику метода API.
CREATE procedure [dbo].[api_order_getOrders]
@parameters ExtendedDictionaryParameter READONLY, -- параметры которые переданы в метод
@username nvarchar(256) --пользователь API (это не логин пользователя в системе)
as
begin
declare @catID int
select @catID = cast(Value2 as int) from @parameters where [Key] = 'catID'
/* select 1 - это информация об операции. В errorCode можно указать
специфичные коды ошибок по операциям */
select '' Msg, 1 Result, 0 errorCode, 0 onlyData
/* select 2 - это данные, которые необходимо передать источнику запроса к API
(в выходном JSON передаются в параметре data) */
select * from ord_orders
/* SELECT 3 Вызов внешних действий (напр Запрос API)*/
end
На входе:
На выходе:
В этом случае нет необходимости использовать токены.
Установка формата вывода для действия.
Для этого укажите json,text или xml в параметре outputType для действия (as_api_actions).
Для включения идемпотентности необходимо в запросе к API передавать определенный параметр или заголовок(например X-Request-ID), содержащий уникальный идентификатор: guid, комбинация из номера заказа, даты и суммы.
Каждый новый запрос, который необходимо обработать, должен включать новое значение X-Request-ID.
Таким образом можно избежать проблем с повторными запросами (когда операция дважды выполнится на сервере для 1 запроса).
Иногда требуется учесть в выходном сообщении результаты выполнения внешних действий, в этом случае необходимо задействовать дополнительную процедуру _result - https://falconspace.ru/docs/vkhodyashchiy-api--kak-uchest-v-otklike-rezultat-vneshnikh-deystviy-v-api