Быстрый старт

Работа со СМЭВ в формате REST API выполняется с помощью сервиса SMEV-PROXY.
URL для обращения:
  • Swagger - http://&ltадрес виртуальной машины&gt:8083/smev-proxy/swagger-ui.html
Узнать адрес виртуальной машины можно в паспорте стенда вашего проекта. Дополнительную информацию можно получить у аккаунт-менеджера.

Обращение из произвольного языка программирования

  1. Выполните генерацию кода контрактов с использованием Swagger Codegen.
  2. Выполните REST запрос с использованием стандартной библиотеки для выбранного языка. В качестве тела POST/PUT запроса, а также в качестве Response моделей используйте контракты, полученные на шаге 1.

При использовании из Java (альтернативный вариант)

  1. Проверьте наличие подключенного maven репозитория в .m2/settings.xml.
    settings.xml type=xml
    <servers>
      <server>
          <id>cpr_maven</id>
          <username>ИМЯ УЧЕТНОЙ ЗАПИСИ В SBER CLOUD</username>
          <password>ПАРОЛЬ УЧЕТНОЙ ЗАПИСИ В SBER CLOUD</password>
      </server>
    </servers>
    
    <profiles>
      <profile>
          <id>default</id>
          <repositories>
              <repository>
                  <id>cpr_maven</id>
                  <url>https://Путь_до_зависимостей_в_нексусе</url>
                  <releases>
                      <enabled>true</enabled>
                  </releases>
              </repository>
          </repositories>
      <profile>
    <profiles>
    
  2. Добавьте зависимости с контрактами в pom.xml.
    pom.xml type=xml
    <dependency>
     <groupId>ru.sbt</groupId>
     <artifactId>smev-proxy-api</artifactId>
     <version>АКТУАЛЬНАЯ ВЕРСИЯ</version>
    </dependency>
    
  3. Сформируйте сервис, с помощью которого будет осуществляться взаимодействие со СМЭВ. Стандартное взаимодействие представляет собой вызов двух REST endpoint:
    3.1. Создание запроса при помощи POST метода, возвращающего информацию о созданном запросе. В ответе метода содержится requestId, который необходим для получения ответа.
    3.2. Получение статуса запроса при помощи GET метода по requestId. Если запрос еще не выполнен, возвращается HTTP Status 425. Если запрос выполнен, возвращается результат в соответствующем формате.
    SmevProxyService.java type=java
    @Service
    public class SmevProxyService {
    
        private final RestTemplate restTemplate = new RestTemplate();
    
        private final String smevUrl;
        private final String smevBroadcastUrl;
        private final String smevAllBroadcastsUrl;
        private final String smevRndrConstructUrl;
        private final String smevRndrArrestUrl;
    
        @Autowired
        public SmevProxyService(
                @Value("${app.smev-proxy.url}") String smevProxyUrl
        ) {
            this.smevUrl = smevProxyUrl;
    
            this.smevBroadcastUrl = smevProxyUrl + "/broadcast";
            this.smevAllBroadcastsUrl = smevProxyUrl + "/broadcast/all";
            this.smevRndrConstructUrl = smevProxyUrl + "/rndr/construct/2/0/0/";
            this.smevRndrArrestUrl = smevProxyUrl + "/rrtr/arrest/1/0/0/";
        }
    
        public <TRequest> String sendRequest(String endpoint, TRequest request) {
            ResponseEntity<SMEVRequestResult> result = restTemplate.postForEntity(
                    smevUrl + modifyEndpoint(endpoint), request, SMEVRequestResult.class);
    
            return Objects.requireNonNull(result.getBody()).getRequestId();
        }
    
        public <TResponse> TResponse getResponse(String endpoint, String requestId, Class<TResponse> responseClass) {
            ResponseEntity<TResponse> result = restTemplate.getForEntity(
                    UriComponentsBuilder
                            .fromUriString(smevUrl)
                            .path(modifyEndpoint(endpoint))
                            .queryParam("requestId", requestId)
                            .toUriString(),
                    responseClass);
    
            return result.getBody();
        }
    
        public String sendRndrConstructRequest(RndrConstructPermitRequest request) {
            return restTemplate.postForEntity(smevRndrConstructUrl, request, String.class).getBody();
        }
    
        public RndrConstructPermitResponse getRndrConstructResponse(String requestId) {
            return restTemplate.getForEntity(
                    UriComponentsBuilder
                            .fromUriString(smevRndrConstructUrl)
                            .queryParam("requestId", requestId)
                            .toUriString(),
                    RndrConstructPermitResponse.class
            ).getBody();
        }
    
        public String sendRrtArrestRequest(RrtrArrestInformationRequest request) {
            return restTemplate.postForEntity(smevRndrArrestUrl, request, String.class).getBody();
        }
    
        public RrtrArrestInformationResponse getRrtArrestResponse(String requestId) {
            return restTemplate.getForEntity(
                    UriComponentsBuilder
                            .fromUriString(smevRndrArrestUrl)
                            .queryParam("requestId", requestId)
                            .toUriString(),
                    RrtrArrestInformationResponse.class
            ).getBody();
        }
    }
    
  4. Добавьте ResponseEntityExceptionHandler для обработки ситуаций, когда запрос еще не выполнен.
    CustomExceptionHandler.java type=java
     @ControllerAdvice
     public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
    
         @ExceptionHandler(HttpClientErrorException.class)
         public final ResponseEntity<String> handleHttpClientErrorException(
                 HttpClientErrorException ex) {
             return new ResponseEntity<>(ex.getResponseBodyAsString(), ex.getStatusCode());
         }
     }
    
  5. Добавьте переменную smev.url в application.yml/application.properties.
    application.yml type=yml
    smev-proxy:
      url: http://platform-gateway/smev-proxy
    
  6. Для демоприложения сформируйте Controller для проверки работы СМЭВ.
    SmevDefaultController.java type=java
     @RestController
     @RequestMapping("/default")
     public class SmevDefaultController {
    
         private final SmevProxyService smevProxyService;
    
         @Autowired
         public SmevDefaultController(SmevProxyService smevProxyService) {
             this.smevProxyService = smevProxyService;
         }
    
         @RequestMapping(value = "/rndrconstruct", method = RequestMethod.GET)
         public RndrConstructPermitResponse getRndrConstructResponse(@RequestParam String requestId) {
             return smevProxyService.getRndrConstructResponse(requestId);
         }
    
         @RequestMapping(value = "/rndrconstruct", method = RequestMethod.POST)
         public String sendRndrConstructRequest(@RequestBody RndrConstructPermitRequest request) {
             return smevProxyService.sendRndrConstructRequest(request);
         }
    
         @RequestMapping(value = "/rrtrarrest", method = RequestMethod.GET)
         public RrtrArrestInformationResponse getRrtArrestResponse(@RequestParam String requestId) {
             return smevProxyService.getRrtArrestResponse(requestId);
         }
    
         @RequestMapping(value = "/rrtrarrest", method = RequestMethod.POST)
         public String sendRrtArrestRequest(@RequestBody RrtrArrestInformationRequest request) {
             return smevProxyService.sendRrtArrestRequest(request);
         }
    
         @RequestMapping(value = "**", method = RequestMethod.GET)
         public Object getResponse(
                 HttpServletRequest request,
                 @RequestParam String requestId) {
             return smevProxyService.getResponse(
                     request.getRequestURI().replace(request.getContextPath() + "/default", ""),
                     requestId,
                     Object.class
             );
         }
    
         @RequestMapping(value = "**", method = RequestMethod.POST)
         public String sendRequest(HttpServletRequest request, @RequestBody Object requestBody) {
             return smevProxyService.sendRequest(
                     request.getRequestURI().replace(request.getContextPath() + "/default", ""),
                     requestBody
             );
         }
     }
    

Демопримеры

В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
СМЭВ
Отправка тестовых запросов в СМЭВ с присвоением успешно отправленным запросам уникальных идентификаторов
Предыдущий раздел
Получение данных
Следующий раздел
Предоставление из ЕГР ЗАГС по запросу сведений о переме...
Была ли страница полезной?