RestApiDeveloperGuide

Материал из RunaWFE
Перейти к навигации Перейти к поиску

Руководство по работе с Rest API

Версия 4.6.0

© 2015-2023, ООО "Процессные технологии"

# Введение

RunaWFE REST API - restful API RunaWFE–сервера, предоставляющий доступ к большинству доступных операций внутри системы (работа с определениями БП, БП, задачами, пользователями, отношениями, логами и т.д.).

OpenApi спецификация находится <a href="https://github.com/processtech/runawfe-free-server/blob/master/wfe-restapi-client/src/main/resources/api-docs.json">тут</a>,

исходный код - <a href="https://github.com/processtech/runawfe-free-server/tree/master/wfe-restapi/src/main/java/ru/runa/wfe/rest/impl">тут</a>.


Аутентификация происходит стандартным способом - посредством передачи JWT в заголовке Authorization (e.g. '-H "Authorization: Bearer ${jwt}")').

Авторизация - путем передачи данных (зачастую логина и пароля) в соответствующие методы и получения JWT (подробнее - <a href="#auth">в отдельном блоке</a>).

Базовый урл - /restapi (например, для localhost - localhost/restapi/)

# Краткая информация об основных API

Краткая информация об основных API

# Auth API

Базовый урл - /auth (например, для localhost - localhost/restapi/auth).

Отвечает за авторизацию пользователей и содержит 3 метода:

  • /basic - авторизация по логину и паролю
  • /kerberos - авторизация по kerberos токену
  • /trusted - авторизация по trusted принципу

# Definition API

Базовый урл - /definition (например, для localhost - localhost/restapi/definition).

Отвечает за работу с определениями БП, основные методы:

  • / - загрузка нового определения БП
  • /list - получение определений БП по заданному фильтру
  • /{id} - получение определения БП по id


# Примеры

# Java

В примерах ниже для удобства будут использоваться

  • Jackson (для сериализации в JSON),
  • клиентская библиотека wfe-restapi (содержащая все необходимые dto),
  • а также Jetty (для выполнения HTTP запросов), пример зависимостей:
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>ru.runa.wfe</groupId>
            <artifactId>wfe-restapi</artifactId>
            <classifier>client</classifier>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>javax-websocket-client-impl</artifactId>
        </dependency>
        

# Авторизация по логину и паролю

        import com.fasterxml.jackson.databind.ObjectMapper;
        import org.eclipse.jetty.client.HttpClient;
        import ru.runa.wfe.rest.dto.WfeCredentials;
        ...
            try {
                HttpClient httpClient = new HttpClient();
                httpClient.start();
                WfeCredentials credentials = new WfeCredentials();
                credentials.setLogin("Administrator");
                credentials.setPassword("wf");
                String token = httpClient.POST("localhost/restapi/" + "auth/basic")
                        .header("Content-type", "application/json")
                        .content(new StringContentProvider(new ObjectMapper().writeValueAsString(credentials)))
                        .send().getContentAsString();
                httpClient.stop();
            } catch (Exception e) {
                // exception handling
            }
            

# Загрузка нового определения БП

        import org.eclipse.jetty.client.HttpClient;
        ...
            try {
                HttpClient httpClient = new HttpClient();
                httpClient.start();
                String token = getToken(httpClient);
                byte[] file = Files.readAllBytes(Paths.get(System.getProperty("user.dir") + "bp.par"));
                httpClient.newRequest("localhost/restapi/" + "definition/")
                        .method(HttpMethod.PUT)
                        .header("Content-type", "multipart/form-data")
                        .header("Authorization", "Bearer " + token)
                        .param("categories", "")
                        .content(new BytesContentProvider(file))
                        .send().getContentAsString();
                httpClient.stop();
            } catch (Exception e) {
                // exception handling
            }
            

# Curl

# Авторизация по логину и паролю

            curl -X POST "http://localhost/restapi/auth/basic" \
                 -H "Content-Type: application/json" \
                 -d '{"login":"Administrator", "password":"wf"}'
            

# Загрузка нового определения БП

            curl -X PUT "http://localhost/restapi/definition/" \
                 -H "Content-Type: multipart/form-data" \
                 -H "Authorization: Bearer ${jwt}" \
                 -F "categories=" \
                 --data-binary "@$(pwd)/bp.par"