Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modelando APIs com a OpenAPI Specification

Modelando APIs com a OpenAPI Specification

A modelagem de APIs é algo crucial no projeto de um software. É a partir dela que as equipes de desenvolvimento e de testes começarão a construir o software e os cenários de testes. Contudo, contratos mal definidos podem levar a erros no momento da integração e/ou durante os testes. O objetivo desta palestra é mostrar como a modelagem de APIs é importante para a criação de contratos bem definidos e como a OpenAPI Specification auxilia na descrição de APIs que podem ser compreendida por todos os atores envolvidos e funcionando como "fonte única da verdade". A utilização da OpenAPI Specification traz inúmeros benefícios como a geração de uma documentação interativa entre outros.

Marcel dos Santos

June 17, 2021
Tweet

More Decks by Marcel dos Santos

Other Decks in Programming

Transcript

  1. Interaja nas mídias sociais!
 
 - fale sobre o evento,

    palestrantes e conteúdo - tire fotos do evento e publique
 - interaja com outros participantes do evento - tire dúvidas ou dê feedbacks para os palestrantes
  2. 1. seguir @marcelgsantos no Twitter
 2. tuitar utilizando as hashtags

    #OpenAPI e #TheDevConf e me marcar no tweet
 3. não vale tuíte em branco
 4. não vale retuíte Concorra a um livro da Casa do Código! 🤩
  3. as APIs são onipresentes nos dias atuais e estão presentes

    na maioria das tarefas que fazemos no dia-a-dia
  4. exemplo 01 ver as notícias no início do dia pelo

    celular, pedir um carro por aplicativo, realizar uma transferência bancária via PIX ou fazer uma compra online
  5. as APIs são a "cola digital" que permitem acelerar parcerias,

    facilitar a integração entre aplicações e criar novos negócios
  6. exemplo 02 uma API para calcular a distância entre dois

    locais ou uma API que compara o preço de um produto nas maiores lojas do mercado
  7. exemplo 03 criar um novo negócio que permite listar os

    pratos em promoção nos restaurantes da região via API
  8. uma API é um conjunto de definições e protocolos usado

    no desenvolvimento e integração de software de aplicações
  9. ele utiliza as funcionalidades do protocolo como o conceito de

    URIs, verbos, cabeçalhos, status code e media types
  10. a OpenAPI Specification é uma especificação aberta e guiada pela

    comunidade utilizada para a descrição de APIs
  11. a OpenAPI Specification faz parte da OpenAPI Initiative e se

    originou a partir da Swagger specification
  12. a OAS é agnóstica de linguagem de programação e é

    compreensível por seres humanos e máquinas
  13. a partir da especificação pode-se gerar, por exemplo, uma documentação

    interativa, boilerplate de código e casos de testes
  14. os documentos podem ser criados manualmente ou dinamicamente através de

    uma aplicação (utilizando annotations, por exemplo)
  15. somentes os serviços REST podem ser descritos pela OpenAPI Specification,

    isto é, nem todos os serviços HTTP podem ser descritos
  16. a OAS não força um processo de desenvol- vimento e

    as abordagens conhecidas são a design-first e a code-first
  17. é por esse motivo que modelar e descrever uma API

    é tarefa importante para diversos atores como desenvolvedores back-end, front-end e testers
  18. mas acontecem situações como:
 
 A: Quais serão os dados

    retornados pela API de pedidos? B: Os dados serão id, cliente, itens, valor total e status. A: Ok, vou implementar a minha parte. B: Ok, vou implementar a minha parte também.
  19. isso pode ocasionar problemas como:
 
 - problema ao integrar

    o front-end e back-end
 - incompatibilidade de tipos do payload
 - payload de erro não padronizado
 - esquecer de tratar status code não previstos
  20. para evitar estes tipos de problemas reco- menda-se utilizar a

    abordagem design-first
 para modelar e descrever APIs
  21. a abordagem design-first permite planeja- mento prévio e compreensão robusta

    entre desenvolvedores e especialistas de domínio de como a API deve funcionar
  22. ela permite também a utilização da linguagem ubíqua do domínio

    para modelar a API, isto é, utilizá-la em urls, query strings, payloads e mensagens de erro
  23. e ao descrever a API utilizando a OpenAPI Specification tem-se

    uma linguagem comum entre os vários atores envolvidos
  24. a OAS pela sua facilidade de leitura para humanos e

    máquinas torna-se a fonte única da verdade na descrição de APIs
  25. uma palestra deverá ser associada a um palestrante e ter

    os campos: título, descrição, nível, duração, data e horário e se possui live coding
  26. !// GET /talks/5049c8b4-4e46-4a41-b52e-83ef8a315a76
 { "id": "5049c8b4-4e46-4a41-b52e-83ef8a315a76", "speaker_id": "7a728c56-b966-4dcc-adc5-57c0f807392c", "title": "Modelando

    APIs com a OpenAPI Specification", "description": "A modelagem de APIs é algo crucial no…”, "level": "beginner", "duration": 30, "presentation_date": "2021-06-08 11:30", "live_coding": true }
  27. !// GET /talks?level=beginner&date=2021-06-08&live_coding=true
 [ { "id": "5049c8b4-4e46-4a41-b52e-83ef8a315a76", "speaker_id": "7a728c56-b966-4dcc-adc5-57c0f807392c", "title":

    "Modelando APIs com a OpenAPI Specification", "description": "A modelagem de APIs é algo crucial no!!...", "level": "beginner", "duration": 30, "presentation_date": "2021-06-08 11:30", "live_coding": true } ]
  28. para isso, deixo como referência as ótimas palestras do Kleber

    Bacilli e do Thiago Lima
 
 - Design de APIs RESTful - youtu.be/psLrAsdHltQ
 - REST API com Thiago Lima - youtu.be/59iOK5TE2CY
  29. um documento OpenAPI que descreve uma API REST deve ter

    obrigatoriamente os campos openapi, info e paths
  30. openapi - indica a versão da especificação
 info - possui

    informações gerais como título, descrição e versão da API
 paths - permite descrever os entrypoints da API
  31. openapi: 3.0.1 info: title: The Developer's Conference API description: API

    para o gerenciamento de palestras do TDC contact: name: Marcel dos Santos url: http:!//example.com/support email: [email protected] version: 0.1.0 paths: {}
  32. contudo, pode-se utilizar também um editor de texto como o

    VSCode ou uma IDE como o IntelliJ ou PhpStorm
  33. servers: - url: http:!//api-dev.example.com description: Development Server - url: https:!//api-hmg.example.com

    description: Homolog Server - url: https:!//api.example.com description: Production Server
  34. um path deve começar com uma barra / e pode

    utilizar placeholders para valores como, por exemplo, /talks/{uuid}
  35. as operações podem ter os campos summary, description, tags, operationId

    que são responsáveis por descrever, organizar e identificar as mesmas
  36. paths: /talks/{uuid}: put: summary: altera os dados de uma palestra

    operationId: updateTalk tags: - talks parameters: # !!... requestBody: # !!... responses: # !!...
  37. e também podem ter os campos parameters, requestBody e responses

    que permitem definir os parâmetros, o corpo da requisição e as respostas
  38. o campo parameters pode ter os campos name, in, description

    e required e permite descrever os parâmetros que estão na url, query string, cabeçalho ou cookie
  39. paths: /talks/{uuid}: put: summary: altera os dados de uma palestra

    operationId: updateTalk parameters: - name: uuid in: path description: uuid da palestra required: true schema: type: string format: uuid requestBody: # !!... responses: # !!...
  40. o campo requestBody possui os campos fixos description, content e

    required e permite descrever o corpo da requisição
  41. o campo content é obrigatório e a sua chave refere-se

    a um media type como application/json e o seu valor a um media type object
  42. paths: /talks/{uuid}: put: summary: altera os dados de uma palestra

    operationId: updateTalk parameters: # !!... requestBody: description: corpo da requisição required: true content: application/json: schema: $ref: '#/components/schemas/Talk' responses: # !!...
  43. e cada status code possui os campos description e content

    e permite descrever o corpo da resposta
  44. paths: /talks/{uuid}: put: summary: altera os dados de uma palestra

    operationId: updateTalk parameters: # !!... requestBody: # !!... responses: '200': description: Ok '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/DomainError'
  45. ele pode ser utilizado para definir o tipo de dados

    de um parâmetro, corpo de requisição ou corpo de resposta
  46. paths: /talks: get: summary: listar palestras parameters: - name: level

    in: query description: nível da palestra required: false schema: type: string enum: - beginner - intermediate - advanced
  47. components: schemas: Talk: type: object properties: id: type: string format:

    uuid speaker_id: type: string format: uuid title: type: string description: type: string level: type: string type: string description: type: string level: type: string enum: - beginner - intermediate - advanced duration: type: integer format: int32 presentation_date: type: string format: datetime has_live_coding: type: boolean
  48. …para que todos os atores envolvidos façam o planejamento antecipado

    e tenham uma compreensão robusta sobre a API
  49. ela permite com que possíveis erros sejam antecipados e efeitos

    indesejados sejam evitados como problemas na integração
  50. a OpenAPI Specification funciona como linguagem única para a descrição

    de APIs REST e é facilmente legível por humanos e máquina
  51. isso faz com que o documento OpenAPI se torna a

    fonte única da verdade sobre a API na sua aplicação
  52. além de permitir a geração automática de boilerplate de código,

    documentação interativa ou casos de testes
  53. recomenda-se aprofundar os estudos para entender melhor os detalhes da

    OAS como media types, recursos de segurança e schemas mais complexos