Контракт первого поколения OpenAPI

Я попытался использовать простой API OpenAPI V3 для реализации на OpenLiberty с парадигмой контрактов.

Я использую следующий плагин для генерации кода OpenAPI:

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

Для генерации я использую <generatorName>jaxrs-spec</generatorName>

В качестве <configOptions> я использую <useSwaggerAnnotations>false</useSwaggerAnnotations>

Помимо классов модели генерируется следующий интерфейс:

@Path("/inventory")
public interface InventoryApi {

  @GET
  @Path("/systems/{hostname}")
  @Produces({ "text/plain", "application/json" })
  Response getPropertiesForHost(@PathParam("hostname") String hostname);

  @GET
  @Path("/systems")
  @Produces({ "application/json" })
  Response listContents();
}

Я стараюсь использовать свою реализацию как можно более компактно, например:

@RequestScoped
@Path("/")
public class InventoryImpl implements InventoryApi {

   public Response getPropertiesForHost(String hostname) {
      ...
   }

   public Response listContents() {
      ...
   }    
}

Я могу позвонить с помощью следующей команды curl curl -X GET "http://localhost:9080/properties-sample/systems" Это работает!

Но я бы ожидал использовать следующее curl -X GET "http://localhost:9080/properties-sample/inventory/systems" Но это не работает. Мне нужно изменить @Path в Impl на @Path("/inventory"), поэтому он работает с использованием curl -X GET "http://localhost:9080/properties-sample/inventory/systems"

Это работает так, как задумано, или @Path аннотации в интерфейсе не имеют значения?

Есть ли у кого-нибудь другой способ использования первой парадигмы контракта с OpenLiberty?


person Igor    schedule 21.08.2018    source источник


Ответы (1)


Вы правы, используя для этого плагин OpenAPI Tools. Open Liberty поддерживает MicroProfile OpenAPI, что позволяет вам открыть документ OAS3, связанный с первым контрактом, но для целей генерации Open Liberty доверяет сообществу OSS OpenAPI Tools.

Эта ссылка должна помочь направить ваш интерфейс в сравнении с реализацией решений класса в отношении аннотаций JAX-RS. В частности, в вашем примере вы переопределяете основную аннотацию @Path, отсюда и другое поведение.

person ArthurDM    schedule 21.08.2018