﻿# Настроить метод API с гибким адресом в модуле

> [HTML Version](api-method-with-wildcard.html)

При вызове [метода API ](https://elma365.com/ru/help/platform/extention-api.html)[в модуле](extention-api.md) можно передавать в его скрипт значения параметров и обрабатывать их. Например, указывать в URL метода идентификатор файла, который нужно получить, или определять дальнейшие действия в зависимости от переданного значения.

Этот способ вызова позволяет настроить интеграцию со сторонними сервисами, в которых используется сложная маршрутизация запросов с передачей параметров напрямую в URL. 

Чтобы передавать значения при обращении к методу API:

- установите для него особый адрес;

- настройте обработку значений в скрипте метода.

Рассмотрим, как это сделать.

## Создание метода с гибким адресом

Допустим, вы создаёте метод API для получения имени и электронной почты сотрудников. При вызове в него передаётся ID пользователя, о котором нужно запросить сведения. Если ID не передан, в ответе отправляются данные всех пользователей.

Чтобы настроить такой метод:

1. В настройках пользовательского модуля на вкладке **Методы API** перейдите к редактированию методов.

2. Нажмите **+ Добавить**.

3. В открывшемся окне введите название и выберите метод \[OBJECT\], так как при вызове будет происходить получение данных.

4. В поле **Адрес\*** введите путь к методу и добавьте в конце сочетание символов **/\***.

**(api-method-with-wildcard-1.png)**

5. В поле **Функция\*** задайте название функции, содержащей скрипт метода, и нажмите **Сохранить**.

6. Сохраните метод API. Теперь часть адреса, которая будет стоять в запросе вместо символа **\***, не учитывается при маршрутизации. В ней можно передавать параметры.

7. Перейдите на вкладку **Скрипты**. Определите, какие действия будут выполняться в методе в зависимости от переданного значения. Для этого получите значение из свойства \[OBJECT\] типа \[OBJECT\], который метод API принимает при вызове:

````
async function users(req: HttpApiRequest): Promise<HttpResponse | void> \{  
    const resp = new HttpResponse();  
  
    // Запись ID пользователя, полученного при вызове метода, в переменную \`userId\`  
    const userId = req.fragment;  
    // Если ID не пустой, выполняется поиск определённого пользователя  
    if (userId) \{  
        const user = await System.users.search().where((f) => f.\_\_id.eq(userId)).first();  
        // Если пользователь найден, в ответе передаются его данные  
        if (user) \{  
            resp.status(HttpStatusCode.OK);  
            resp.json(\{  
                id: user.data.\_\_id,  
                name: user.data.\_\_name,  
                email: user.data.email,  
            \});  
        // Если пользователь не найден, в ответе отправляется сообщение об ошибке  
        \} else \{  
            resp.status(HttpStatusCode.NOT\_FOUND);  
            resp.content(\`user with id \$\{ userId \} not found\`);  
        \}  
        return resp;  
    \}  
  
    // Если в запросе не передан ID, в ответ включаются данные всех пользователей  
    const users = await System.users.search().all();  
    resp.status(HttpStatusCode.OK);  
    resp.json(users.map((user) => (\{  
        id: user.data.\_\_id,  
        name: user.data.\_\_name,  
        email: user.data.email,  
    \})));  
  
    return resp;  
\}

````
Подробнее о написании скриптов для методов API читайте в статье [«Методы API в модулях»](extention-api.md#access-to-global-constants).

8. Сохраните и опубликуйте метод.

Теперь вы можете вызывать настроенный метод API из сторонних систем или из скриптов ELMA365.

## Вызов метода с гибким адресом из стороннего сервиса

Обращение к методам API из внешних сервисов выполняется с помощью метода \[OBJECT\]. В него передаётся полный URL метода API. Чтобы указать в запросе значения параметров, добавьте их в конце адреса через символ **/**.

Например, при вызове [метода users/\*](#create-method) передаётся ID пользователя для получения его данных: 

````
let response = await fetch('https://abcd1234.elma365.ru/api/extensions/f1e6cf15-7c65-4be5-8443-021a280dcd80/script/users/fb894dcb-9fe0-4783-b7a9-8a76099446b0', \{  
    method: "GET",  
\});

## ````
Вызов метода с гибким адресом из скрипта в ELMA365

Для вызова методов API через скрипт применяется метод \[OBJECT\].Чтобы передать значения параметров, используйте функцию \[OBJECT\].

Например, при вызове [метода users/\*](#create-method) можно указать ID пользователя, чтобы запросить информацию о нём:

````
await Namespace.api.users  
    .withFragment('fb894dcb-9fe0-4783-b7a9-8a76099446b0')  
    .call(\{  
        method: 'GET',  
    \});

````
Если передавать параметры не требуется, метод можно вызвать без функции \[OBJECT\]. Например, при обращении к методу \[OBJECT\] в этом случае вы получите сведения обо всех сотрудниках:

````
await Namespace.api.users.call(\{  
    method: 'GET',  
\});
````