Подключение и конфигурирование#

Взаимодействие с сервисом происходит по REST-протоколу. Для поиска адреса по справочнику ФИАС и вывода результата используются POST-запросы. Запрос и ответ формируются в формате JSON. Описание параметров запроса и ответа, а также примеры использования API приведены в документе «Быстрый старт».

Настройки компонентов программного компонента#

Настройка компонента addresses-finder осуществляется на этапе установки FIAS. Список настраиваемых параметров приведен в разделе Настраиваемые параметры Руководства по установке.

Дополнительных настроек не требуется.

Настройка взаимодействия на базе спецификаций OpenAPI#

API доступа к проекту предоставляется в виде OpenAPI-контракта.

Java-API генерируется на базе поставляемого совместно с дистрибутивом OpenAPI-контракта, при помощи плагина OpenAPI:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
</plugin>

Выполнение пользовательского поискового запроса#

  1. Подтяните URL сервиса FIAS одним из следующих способов:

    • с помощью глобальной переменной global.ose.platform.fias.rest.client.base.url;

    • с помощью запроса к сервису CFGA;

    • с помощью панели администратора среды контейнеризации в разделе ConfigMap.

Пример подключения через глобальную переменную
    {
      "name": "ufs.baseurl.fias",
      "description": "URL сервиса FIAS, например, <protocol>://<host>:<port>",
      "isList": false,
      "roles": [
        "ManageParameters.ParameterRole.System"
      ],
      "type": "STRING",
      "bundle": [
        {
          "path": [],
          "values": [
            "${global.ose.platform.fias.rest.client.base.url}"
          ]
        }
      ]
    }
Пример подключения через сервис CFGA

@Autowired
private ExtendedConfigService extendedConfigService;

private ParameterValue getSupValue(String value) {
        ConfigRequest configRequest = ConfigRequest.configRequest(value, pathItemList);
        return extendedConfigService.getParameters(configRequest).getOne(configRequest);
}
...
public String getStringParameter(SupParameter supParameter) {
        ParameterValue parameterValue = getParameter(supParameter.getParameterName());
        if (parameterValue != null && parameterValue.getString().isPresent()) {
            return parameterValue.getString().get();
        } else {
            return (String) supParameter.getDefaultValue();
        }
}
  1. Выполните запрос к сервису.

Пример запроса при однострочном поиске
private final static String addresses_url = getStringParameter("ufs.baseurl.fias") + "/addresses-finder/api/v1/1/search";
@RequestMapping(value = "/test-one-line", produces = "application/json", method = RequestMethod.GET)
public SuggestionResponse doOneLineSearch() {
    HttpEntity<HintRequest> request = new HttpEntity<>(getOneLineHintRequest(), getOneLineSearchHeaders());
    ResponseEntity<Object> response = restTemplate.postForEntity(addresses_url, request, Object.class);
    Map body = (Map) response.getBody();
    Object value = Objects.requireNonNull(body).get("body");
    SuggestionResponse resp = mapper.map(value, SuggestionResponse.class);
    return resp;
}
private HintRequest getOneLineHintRequest() {
    HintRequest hintRequest = new HintRequest();
    hintRequest.setQuery("ненецкий село халявсавэй улица ненецкая");
    hintRequest.setCount(1);
    hintRequest.setAbbreviatedAttribute(false);
    hintRequest.setSearchByFirstWord(false);
    return hintRequest;
}
    private HttpHeaders getOneLineSearchHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        return headers;
    }
Пример запроса при трехстрочном поиске
private final static String addresses_url = getStringParameter("ufs.baseurl.fias") + "/addresses-finder/api/v1/1/search";
@RequestMapping(value = "/test-three-step", produces = "application/json", method = RequestMethod.GET)
public SuggestionResponse doThreeStepSearch() {
    HttpEntity<HintRequest> request = new HttpEntity<>(getThreeStepHintRequest(), getThreeStepSearchHeaders());
    ResponseEntity<Object> response =  restTemplate.postForEntity(addresses_url, request, Object.class);
    Map body = (Map) response.getBody();
    Object value = Objects.requireNonNull(body).get("body");
    SuggestionResponse resp = mapper.map(value, SuggestionResponse.class);
    return resp;
}
    private HintRequest getThreeStepHintRequest() {
        HintRequest hintRequest = new HintRequest();
        hintRequest.setAddressKind(HintRequest.AddressKindEnum.REGION);
        hintRequest.setCount(1);
        hintRequest.setQuery("ненец");
        hintRequest.setAbbreviatedAttribute(false);
        hintRequest.setSearchByFirstWord(false);
        return hintRequest;
private HttpHeaders getThreeStepSearchHeaders() {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}
Пример запроса при поиске по FIAS_GUID
    private final static String addresses_url = getStringParameter("ufs.baseurl.fias") + "/addresses-finder/api/v1/1/search_fiasid";
@RequestMapping(value = "/test-fias-guid", produces = "application/json", method = RequestMethod.GET)
    public SuggestionResponse doFiasGuidSearch() {
        HttpEntity<FiasGuidHintRequest> request = new HttpEntity<>(getFiasGuidHintRequest(), getFiasGuidHeaders());
        ResponseEntity<Object> response = restTemplate
                .postForEntity(addresses_url, request, Object.class);
        Map body = (Map) response.getBody();
        Object value = Objects.requireNonNull(body).get("body");
        SuggestionResponse resp = mapper.map(value, SuggestionResponse.class);
        return resp;
    }
    private FiasGuidHintRequest getFiasGuidHintRequest() {
        FiasGuidHintRequest fiasGuidHintRequest = new FiasGuidHintRequest();
        fiasGuidHintRequest.setFiasGuid("42dbbbde-8003-42f4-bd51-ae3ef137fc41");
        fiasGuidHintRequest.setCount(1);
        fiasGuidHintRequest.setAbbreviatedAttribute(false);
        return fiasGuidHintRequest;
    }
    private HttpHeaders getFiasGuidHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        return headers;
    }