Страница 1 из 1

API поля в запросе и ответе

Добавлено: 04 дек 2024, 03:13
Евгений
По работе с API два вопроса.

1. Поля в теле запроса.
Для сторонних пользователей (другая организация) организовал доступ по API для получения данных. Сторонняя система отправляет в Руководитель запрос JSON с телом такого вида:

Код: Выделить всё

{
  "key": "====",
  "username": "API",
  "password": "====",
  "action": "select",
  "entity_id": 21,
  "filters":{
    "158":"Проект"
    }
}
И получает результат:

Код: Выделить всё

{
  "status": "success",
  "data": [
    {
      "id": "1",
      "parent_item_id": "0",
      "date_added": "22.11.2024 15:58",
      "date_updated": "22.11.2024 15:59",
      "created_by": "1",
      "197": "",
      "153": "1",
      "154": "22.11.2024 15:58",
      "155": "А Администратор",
      "156": "Срочный",
      "156_db_value": "34",
      "157": "Новый",
      "157_db_value": "37",
      "158": "Проект",
      "203": "22.11.2024 15:59",
      "159": "",
      "160": "проект",
      "162": "",
      "161": "",
      "161_db_value": ""
    }
  ],
  "page": 1,
  "number_of_rows": 1,
  "number_of_pages": 1
}
Вопрос - можно ли как-то изменить набор полей в теле запроса? Зачем сторонним системам знать, что у меня сущность "Проекты" имеет код 21 ? Зачем им знать код 158 поля "Заголовок" для сущности "Проекты" ? Можно ли как-то создать свой собственный набор полей для запроса, с символьными названиями?

2. Поля в ответе
Для пользователя "API" на сущность 21 "Проекты" даны права доступа "Просмотр всех записей", а доступ к полям Проектов скрыт для всех полей, только для "Название" (ИД=158) оставлен доступ "Только просмотр". Однако запрос API возвращает полный набор всех полей этой сущности.

По всей видимости API не учитывает правила ограничения доступа. Как ограничить набор полей, которые выдаются пользователю в ответе? И коды полей тоже бы подменять, чтобы видели не "158 : Проект", а "Название : Проект".

Re: API поля в запросе и ответе

Добавлено: 04 дек 2024, 13:50
Fait
Вышло простой - писать собственный API для обработки их запросов)

Re: API поля в запросе и ответе

Добавлено: 05 дек 2024, 10:27
Евгений
Fait писал(а): 04 дек 2024, 13:50 Вышло простой - писать собственный API для обработки их запросов)
Я именно так и сделал, пока в виде отдельного сервиса. Который с одной стороны принимает запросы от сторонней системы, а другим концом смотрит в базу Руководителя и берет оттуда данные + сопутствующие данные из ещё одной базы на Постгресе.

Но мне такое не нравится. В идеале хотелось бы чтобы в Руководителе был еще один "пустой" API, который принимал бы любые запросы. Чтобы я мог сам разбирать поля запроса так как мне нужно и формировать ответный JSON тоже в любом произвольном виде.

Возможно ли такое добавить в Руководитель?

Re: API поля в запросе и ответе

Добавлено: 05 дек 2024, 10:30
Евгений
Если я правильно понимаю, то в Руководителе не предусмотрен API произвольного вида, можно обратиться только с запросом к какой-то определенной сущности. И в ответ будут включены только записи из неё.

Re: API поля в запросе и ответе

Добавлено: 06 дек 2024, 12:33
Евгений
Fait писал(а): 04 дек 2024, 13:50 Вышло простой - писать собственный API для обработки их запросов)
Так и сделал. Написал простейший API обертку, принимает запросы в том виде как мне нужно, берет данные напрямую из базы, и выдаёт только то что нужно видеть сторонней системе. Но было бы удобнее, если возможность использовать кастомный API была бы прямо из коробки. Попробую оформить этот сервис в виде плагина.

Re: API поля в запросе и ответе

Добавлено: 08 дек 2024, 17:42
Fait
Евгений писал(а): 06 дек 2024, 12:33
Fait писал(а): 04 дек 2024, 13:50 Вышло простой - писать собственный API для обработки их запросов)
Так и сделал. Написал простейший API обертку, принимает запросы в том виде как мне нужно, берет данные напрямую из базы, и выдаёт только то что нужно видеть сторонней системе. Но было бы удобнее, если возможность использовать кастомный API была бы прямо из коробки. Попробую оформить этот сервис в виде плагина.
Будет очень круто, если получится!