Todos os produtos
Search
Central de documentação

:Desenvolver aplicações RESTful (não recomendado)

Última atualização: Jul 04, 2026

Desenvolva aplicações RESTful no framework HSF e implemente o registro e a descoberta de serviços. Como o e o SAE agora oferecem suporte nativo a aplicações Spring Cloud, este método de desenvolvimento não é recomendado para novos usuários.

Informações de contexto

Para saber como desenvolver serviços com o framework nativo do Spring Cloud, consulte e Hospedar aplicações Spring Cloud no SAE.

Registro e descoberta de serviços

Esta seção descreve o desenvolvimento de uma aplicação RESTful local com registro e descoberta de serviços.

Baixe o código-fonte de demonstração:

  1. Crie um provedor de serviços.

    Este provedor expõe um serviço echo simples e se registra no registro de serviços.

    1. Crie um projeto de aplicação RESTful chamado sc-vip-server.

    2. Adicione as dependências necessárias ao arquivo pom.xml.

          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.8.RELEASE</version>
              <relativePath/>
          </parent>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-vipclient</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-pandora</artifactId>
                  <version>1.3</version>
              </dependency>
          </dependencies>
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Dalston.SR4</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>

      Se não quiser definir o pai do projeto como spring-boot-starter-parent, adicione uma seção dependencyManagement e defina scope="import" para gerenciar as dependências.

      <dependencyManagement>
                  <dependencies>
                      <dependency>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-dependencies</artifactId>
                          <version>1.5.8.RELEASE</version>
                          <type>pom</type>
                          <scope>import</scope>
                      </dependency>
                  </dependencies>
      </dependencyManagement>
    3. Crie a aplicação provedora de serviços. Use a anotação @EnableDiscoveryClient para ativar o registro e a descoberta de serviços.

      @SpringBootApplication
          @EnableDiscoveryClient
          public class ServerApplication {
              public static void main(String[] args) {
                  PandoraBootstrap.run(args);
                  SpringApplication.run(ServerApplication.class, args);
                  PandoraBootstrap.markStartupAndWait();
              }
          }
    4. Crie um EchoController para fornecer um serviço echo simples.

      @RestController
          public class EchoController {
              @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
              public String echo(@PathVariable String string) {
                  return string;
              }
          }
    5. No arquivo application.properties, localizado no diretório resources, configure o nome da aplicação e a porta de escuta.

      spring.application.name=service-provider
      server.port=18081
  2. Crie um consumidor de serviços.

    Este exemplo cria um consumidor de serviços que chama o provedor usando RestTemplate, AsyncRestTemplate e FeignClient.

    1. Crie um projeto de aplicação RESTful chamado sc-vip-client.

    2. Adicione as dependências necessárias ao arquivo pom.xml.

      <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.8.RELEASE</version>
              <relativePath/>
          </parent>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-vipclient</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-pandora</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-feign</artifactId>
              </dependency>
          </dependencies>
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Dalston.SR4</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>

      Este exemplo usa FeignClient para demonstração. Diferentemente do provedor de serviços (sc-vip-server), o arquivo pom.xml do consumidor inclui a dependência adicional spring-cloud-starter-feign.

    3. Para usar RestTemplate, AsyncRestTemplate e FeignClient, ative também o registro e a descoberta de serviços (como feito no sc-vip-server) e adicione as duas configurações a seguir.

      • Adicione a anotação @LoadBalanced para integrar RestTemplate e AsyncRestTemplate à descoberta de serviços.

      • Adicione a anotação @EnableFeignClients para ativar o FeignClient.

        @SpringBootApplication
            @EnableDiscoveryClient
            @EnableFeignClients
            public class ConsumerApplication {
                @LoadBalanced
                @Bean
                public RestTemplate restTemplate() {
                    return new RestTemplate();
                }
                @LoadBalanced
                @Bean
                public AsyncRestTemplate asyncRestTemplate(){
                    return new AsyncRestTemplate();
                }
                public static void main(String[] args) {
                    PandoraBootstrap.run(args);
                    SpringApplication.run(ConsumerApplication.class, args);
                    PandoraBootstrap.markStartupAndWait();
                }
            }
    4. Antes de usar o FeignClient para o EchoService, configure o nome do serviço e mapeie o método para a requisição HTTP correspondente. No projeto sc-vip-server, o nome do serviço está configurado como service-provider.

      @FeignClient(name = "service-provider")
          public interface EchoService {
              @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
              String echo(@PathVariable("str") String str);
          }
    5. Crie um Controller para testar as chamadas de serviço.

      @RestController
      public class Controller {
         @Autowired
         private RestTemplate restTemplate;
         @Autowired
         private AsyncRestTemplate asyncRestTemplate;
         @Autowired
         private  EchoService echoService;
         @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
         public String rest(@PathVariable String str) {
             return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
         }
         @RequestMapping(value = "/echo-async-rest/{str}", method = RequestMethod.GET)
         public String asyncRest(@PathVariable String str) throws Exception{
             ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate.
                     getForEntity("http://service-provider/echo/"+str, String.class);
             return future.get().getBody();
         }
         @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
         public String feign(@PathVariable String str) {
             return echoService.echo(str);
         }
      }

      O código implementa três endpoints para teste:

      • /echo-rest/: Verifica a chamada ao provedor de serviços usando RestTemplate.

      • /echo-async-rest/: Valida a chamada ao provedor de serviços usando AsyncRestTemplate.

      • /echo-feign/: Confirma a chamada ao provedor de serviços usando FeignClient.

    6. Configure o nome da aplicação e a porta de escuta.

      spring.application.name=service-consumer
      server.port=18082
  3. Desenvolva e depure localmente.

    1. Inicie o centro de configuração leve.

      Para desenvolvimento e depuração locais, use o centro de configuração leve. Ele fornece uma versão simplificada do componente de registro e descoberta de serviços do lado do servidor usado pelo

      EDAS

      e

      SAE

      . Para mais informações, consulte

      Iniciar o centro de configuração e registro leve

      .

    2. Inicie a aplicação.

      • Iniciar a partir de uma IDE

        Para iniciar a aplicação pela IDE, adicione a opção de VM -Dvipserver.server.port=8080 e execute o método main. Nota: Este parâmetro é necessário apenas para desenvolvimento local com o centro de configuração leve. Remova-o ao implantar a aplicação no ou SAE. Caso contrário, a aplicação pode falhar ao publicar ou assinar serviços.

        Se o centro de configuração leve e sua aplicação estiverem em máquinas diferentes, configure os bindings de host. Para mais informações, consulte Iniciar o centro de configuração e registro leve.

      • Iniciar a partir de um FatJar

        1. Adicione o plug-in de empacotamento FatJar.

          Para empacotar o projeto pandora-boot em um FatJar usando Maven, adicione o seguinte plug-in ao seu arquivo pom.xml. Para evitar conflitos, não adicione outros plug-ins de FatJar na seção <plugins> da configuração de build.

          <build>
              <plugin>
                  <groupId>com.taobao.pandora</groupId>
                      <artifactId>pandora-boot-maven-plugin</artifactId>
                      <version>2.1.9.1</version>
                      <executions>
                         <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                         </execution>
                       </executions>
              </plugin>
          </build>
        2. Após adicionar o plug-in, execute o comando mvn clean package no diretório raiz do projeto. O arquivo FatJar será gerado no diretório target.

        3. Inicie a aplicação com um comando Java.

          java -Dvipserver.server.port=8080 -Dpandora.location=/Users/{$username}/.m2/repository/com/taobao/pandora/taobao-hsf.sar/dev-SNAPSHOT/taobao-hsf.sar-dev-SNAPSHOT.jar  -jar sc-vip-server-0.0.1-SNAPSHOT.jar
          Nota

          O caminho especificado por

          -Dpandora.location

          deve ser absoluto e posicionado antes do argumento

          -jar

          .

      Inicie os serviços e chame os endpoints. A saída mostra que todas as chamadas foram bem-sucedidas.

      → ~ curl http://localhost:18082/echo-rest/rest-test
      rest-test%
      → ~ curl http://localhost:18082/echo-async-rest/async-rest-test
      async-rest-test%
      → ~ curl http://localhost:18082/echo-feign/feign-test
      feign-test%
  4. Solucione problemas comuns.

    • O AsyncRestTemplate não consegue se conectar à descoberta de serviços.

      O suporte à descoberta de serviços via AsyncRestTemplate foi adicionado no Spring Cloud Dalston. Use esta versão ou superior. Para mais detalhes, consulte este pull request.

    • Conflitos com o plug-in de empacotamento FatJar.

      Para evitar conflitos, não adicione outros plug-ins de FatJar na seção <plugins> da configuração de build.

    • Posso incluir o taobao-hsf.sar no pacote?

      Sim, mas isso não é recomendado.

      Modifique a configuração do pandora-boot-maven-plugin definindo

      excludeSar

      como

      false

      . Isso inclui automaticamente o taobao-hsf.sar no pacote.

      <plugin>
          <groupId>com.taobao.pandora</groupId>
          <artifactId>pandora-boot-maven-plugin</artifactId>
          <version>2.1.9.1</version>
          <configuration>
          <excludeSar>false</excludeSar>
          </configuration>
             <executions>
                 <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                  </execution>
          </executions>
      </plugin>

      Assim, inicie a aplicação sem precisar configurar a localização do Pandora.

      java -jar  -Dvipserver.server.port=8080 sc-vip-server-0.0.1-SNAPSHOT.jar

      Antes de implantar a aplicação no ou SAE, restaure a configuração padrão para excluir o pacote SAR.

Rastreamento distribuído

Para habilitar o rastreamento distribuído, integre sua aplicação RESTful local ao EagleEye no EDAS com algumas pequenas modificações.

O EDAS fornece o componente EagleEye para rastreamento distribuído, reduzindo custos de desenvolvimento e aumentando a eficiência. Para utilizar esse recurso, basta configurar os pontos de rastreamento do EagleEye no código; o EDAS cuida da coleta, análise e armazenamento dos logs.

Baixe o código-fonte de demonstração: service1 e service2.

Integrate with EagleEye

  1. Configure o endereço do repositório privado do EDAS no Maven.

    Os pacotes do Pandora Boot Starter são publicados exclusivamente no repositório privado do EDAS. Portanto, configure esse repositório no arquivo settings.xml do Maven (para Maven 3.x ou posterior). Para mais informações, consulte

    Configurar o endereço do repositório privado e o centro de configuração leve para EDAS e SAE

    .

  2. Modifique o código.

    A integração de uma aplicação RESTful com o EagleEye no EDAS é simples. Siga estas três etapas:

    1. Adicione as seguintes dependências ao seu arquivo pom.xml.

              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-eagleeye</artifactId>
                  <version>1.3</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-pandora</artifactId>
                  <version>1.3</version>
              </dependency>
    2. Altere o método main.

      Se o método main original for:

      public static void main(String[] args) {
          SpringApplication.run(ServerApplication.class, args);
      }

      Modifique-o para:

      public static void main(String[] args) {
          PandoraBootstrap.run(args);
          SpringApplication.run(ServerApplication.class, args);
          PandoraBootstrap.markStartupAndWait();
      }
    3. Adicione o plug-in de empacotamento FatJar.

      Para empacotar o projeto pandora-boot em um FatJar usando Maven, adicione o seguinte plug-in ao seu arquivo pom.xml.

      Para evitar conflitos, não adicione outros plug-ins de FatJar na seção <plugins> da configuração de build.

      <build>
          <plugins>
          <plugin>
              <groupId>com.taobao.pandora</groupId>
              <artifactId>pandora-boot-maven-plugin</artifactId>
              <version>2.1.9.1</version>
              <executions>
              <execution>
                  <phase>package</phase>
                  <goals>
                  <goal>repackage</goal>
                  </goals>
                  </execution>
              </executions>
          </plugin>
          </plugins>
      </build>

      Após concluir essas três modificações, use o recurso de rastreamento distribuído do EDAS diretamente, sem precisar configurar sistemas de coleta ou análise.

Distributed tracing example

Para demonstrar o uso do rastreamento distribuído, este exemplo utiliza duas aplicações de demonstração: service1 e service2.

O service1 atua como serviço de entrada e oferece três cenários de demonstração:

  • /rest/ok: Uma chamada normal

    全链路跟踪示例rest_ok

  • /rest/delay: Uma chamada com alta latência

    全链路跟踪示例rest_delay

  • /rest/error: Uma chamada que resulta em erro

    全链路跟踪示例rest_error

  1. Implante as aplicações.

    Os recursos de coleta e análise do EagleEye são baseados no EDAS. Para visualizar os rastreamentos, implante primeiro as aplicações service1 e service2 no EDAS. Para mais informações, consulte os seguintes documentos:

  2. Visualize os rastreamentos.

    Após a implantação, chame os endpoints do service1 para gerar dados de rastreamento. Use um comando

    curl

    simples, como

    curl http://{$ip:$port}/rest/ok

    . Também é possível usar ferramentas como Postman ou fazer chamadas diretamente pelo navegador. Para gerar mais dados de observação, recomendamos o uso de um script para realizar múltiplas chamadas. Em seguida, siga estas etapas para visualizar o rastreamento:

    • Faça login no console do EDAS e acesse a aplicação recém-implantada.

    • No painel de navegação à esquerda da página de detalhes da aplicação, escolha Application Monitoring > API Call.

    • Visualize as informações na página API Call.

  3. Demonstração de rastreamento para outros clientes.

    As URIs /echo-rest/{str}, /echo-async-rest/{str} e /echo-feign/{str} no service1 demonstram o suporte a rastreamento automático do EagleEye para RestTemplate, AsyncRestTemplate e FeignClient. Após chamar esses endpoints, visualize seus rastreamentos conforme descrito acima.

Tópicos relacionados

  • Suporte a rastreamento

    O EagleEye no EDAS rastreia automaticamente requisições feitas por RestTemplate, AsyncRestTemplate e FeignClient. O suporte a rastreamento automático para mais componentes será adicionado futuramente.

  • AsyncRestTemplate

    O AsyncRestTemplate requer modificações para suporte a rastreamento durante a fase de instanciação da classe. Portanto, para usar o recurso de rastreamento distribuído, injete o objeto eagleEyeAsyncRestTemplate pelo nome. Esse objeto já vem com suporte à descoberta de serviços ativado por padrão.

    @Autowired
    private AsyncRestTemplate eagleEyeAsyncRestTemplate;
  • Plug-in de empacotamento FatJar

    Para empacotar um projeto pandora-boot em um FatJar usando Maven, adicione o pandora-boot-maven-plugin ao seu arquivo pom.xml. Para evitar conflitos, não adicione outros plug-ins de FatJar na seção <plugins> da configuração de build.