Implementar o servidor de reserva: API v2

Ao configurar um servidor de agendamento, a Central de ações pode criar agendamentos / reservas / reservas com você em nome do usuário.

Implementar uma interface de API baseada em gRPC

Observação: todos os novos parceiros precisam usar a interface da API REST em vez da API gRPC.

Implemente uma interface de API baseada em gRPC. Isso permite que o Google envie solicitações de agendamento. A superfície da API é definida usando o IDL baseado em protobuf do gRPC.

Pedimos aos nossos novos parceiros que implementem um conjunto recomendado da API v2. Os parceiros podem selecionar o URL e a PORTA que funcionarem melhor para a infraestrutura deles.

Esta seção apresenta um conjunto recomendado da API v2. Isso se aplica a parceiros que não implementaram a API v0. Para nossos parceiros atuais que implementaram a API v0, entre em contato com a Central de ações para saber mais.

Faça o download da definição do serviço no formato proto abaixo para começar a implementação da API.

Fazer o download da definição do serviço

Recursos de API

Familiarize-se com os seguintes tipos de recursos que serão utilizados nesta implementação:

  • Slot: um slot de inventário
  • Agendamento: agendamento para um espaço de inventário.

Métodos

Os seguintes métodos de API são necessários para serem implementados no servidor gRPC:

Estes cinco métodos definem o conjunto obrigatório de RPCs do BookingService:

// Manages slot availability, leases and bookings for an inventory of
// appointments
service BookingService {
  // Gets availability information for an appointment slot
  rpc CheckAvailability(CheckAvailabilityRequest)
      returns (CheckAvailabilityResponse) {}

  // Creates a booking
  rpc CreateBooking(CreateBookingRequest) returns (CreateBookingResponse) {}

  // Updates an existing booking
  rpc UpdateBooking(UpdateBookingRequest) returns (UpdateBookingResponse) {}

  // Gets status for an existing booking
  rpc GetBookingStatus(GetBookingStatusRequest)
      returns (GetBookingStatusResponse) {}

  // Lists all upcoming bookings for a user
  rpc ListBookings(ListBookingsRequest) returns (ListBookingsResponse) {}
}

Fluxo: criar um agendamento

Figura 1:criar um agendamento usando um slot

Ao criar um agendamento, o Google envia ao parceiro o nome, sobrenome, número de telefone e e-mail do usuário. Isso precisa ser tratado como uma finalização de compra como convidado do ponto de vista do parceiro, já que a Central de ações não tem como procurar a conta do usuário no sistema do parceiro. A reserva final precisa ser mostrada aos comerciantes do parceiro no sistema, da mesma forma que as reservas feitas no sistema do parceiro.

Implementação de esqueleto em Java

Para começar, fornecemos um esqueleto de servidor gRPC em Java que pode ser compilado e instalado. Confira na seção Amostras > Implementação da referência gRPC. Este servidor criou stubs de métodos gRPC que são necessários para oferecer suporte à integração, incluindo autenticação e serviço de integridade.

Requisitos

Erro gRPC e erro de lógica de negócios

Dois tipos de erro podem ocorrer quando um back-end de parceiro processa solicitações gRPC: erros inesperados que surgem de dados incorretos e erros de lógica de negócios que indicam incapacidade de criar ou atualizar um agendamento (consulte Falha no agendamento), por exemplo, se o slot solicitado não estiver disponível.

Erros inesperados, se encontrados, devem ser retornados ao cliente usando códigos de erro gRPC canônicos. Alguns exemplos incluem:

  • INVALID_ ARGUMENT é usado em RPCs, como CheckAvailability e CreateLease, e deve ser retornado se o slot fornecido contiver informações inválidas.
  • NOT_FOUND é usado em RPCs, como CreateBooking e ListBookings, e precisará ser retornado se o identificador fornecido for desconhecido para o parceiro.

Consulte a referência de cada método para os códigos de erro canônicos do gRPC ou veja a lista completa de códigos de status.

Por outro lado, os erros de lógica de negócios precisam ser registrados em Falha no agendamento e retornados na resposta de RPC. Erros de lógica de negócios podem ser encontrados ao criar ou atualizar um recurso, ou seja, ao processar CreateBooking e RefreshBooking de RPCs. Alguns exemplos incluem:

  • SLOT_UNAVAILABLE será usado se o espaço solicitado não estiver mais disponível.
  • PAYMENT_ERROR_CARD_TYPE_REJECTED será usado se o tipo de cartão de crédito fornecido não for aceito.

Idempotência

A comunicação pela rede nem sempre é confiável, e o Google Reserve poderá tentar fazer RPCs novamente se nenhuma resposta for recebida. Por esse motivo, todos os RPCs que mudam o estado (CreateBooking, UpdateBooking) precisam ser idempotentes. As mensagens de solicitação para essas RPCs incluem tokens de idempotência para identificar exclusivamente a solicitação e permitir que o parceiro diferencie uma RPC repetida (com a intenção de criar um único agendamento) e duas reservas separadas.

Alguns exemplos incluem:

  • Uma resposta de RPC CreateBooking bem-sucedida inclui o agendamento criado e, em alguns casos, o pagamento é processado como parte do fluxo de reserva. Se o mesmo CreateBookingRequest for recebido uma segunda vez (incluindo idempotency_token), o mesmo CreateBookingResponse precisará ser retornado. Nenhuma segunda reserva é criada, e o usuário, se aplicável, vai ser cobrado exatamente uma vez. Se uma tentativa de CreateBooking falhar, o back-end do parceiro precisará tentar se a mesma solicitação for enviada novamente.

O requisito de idempotência se aplica a todos os métodos que contêm tokens de idempotência.

Segurança e autenticação do servidor gRPC

As chamadas da Central de ações para seu back-end precisam ser protegidas usando SSL/TLS com autenticação mútua de cliente/servidor baseada em certificado. Isso exige o uso de um certificado de servidor válido para a implementação do gRPC e a aceitação de um certificado do cliente válido.

Certificado do servidor:o servidor do parceiro precisa estar equipado com um certificado de servidor válido associado ao nome de domínio do servidor. Consulte esta lista de CAs raiz aceitas. As implementações do servidor GRPC esperam disponibilizar uma cadeia de certificados que leva ao certificado raiz. A maneira mais fácil de fazer isso é anexar os certificados intermediários fornecidos pelo host da Web do parceiro em formato PEM ao certificado do servidor, também no formato PEM.

O certificado do servidor é verificado no momento da conexão, e certificados autoassinados não são aceitos. O conteúdo real do certificado não será verificado enquanto o certificado for válido. Use o seguinte comando para verificar a validade do seu certificado:

echo "" | openssl s_client  -connect YOUR_URL:YOUR_PORT  -showcerts -CApath /etc/ssl/certs

Certificado do cliente:para nos autenticar como o Google do parceiro, fornecemos um certificado do cliente emitido pela Google Internet Authority G2 (certificado de CA) com as seguintes propriedades:

Campo Valor
CN mapsbooking.businesslink-3.net
SAN DNS:mapsbooking.businesslink-3.net

As tentativas de conexão sem esse certificado do cliente precisam ser rejeitadas pelo servidor do parceiro.

Para validar o certificado do cliente, o servidor depende de um conjunto de certificados raiz confiáveis. É possível conseguir esse conjunto de raízes confiáveis de uma autoridade como o Mozilla (link em inglês) ou instalar o conjunto de raízes atualmente recomendado pela Google Internet Authority G2 (em inglês). Em ambos os casos, pode ser necessário atualizar manualmente os certificados raiz.

Implementar o protocolo de verificação de integridade do gRPC

Implemente o protocolo de verificação de integridade do GRPC. Esse protocolo permite que o Google monitore o status de back-end da implementação do gRPC. A especificação do serviço faz parte da distribuição GRPC. Seguindo a convenção de nomenclatura GRPC, o nome do serviço nas chamadas de verificação de integridade é ext.maps.booking.partner.v2.BookingService para a API v2 ou ext.maps.booking.partner.v0.BookingService para a API v0. A verificação de integridade precisa ser executada no mesmo URL e PORTA que os outros endpoints.

Outras versões

Para ver a documentação de outras versões da API, consulte as seguintes páginas: * API v3 * API v0