SlideShare a Scribd company logo
Writing REST APIs with OpenAPI
and Swagger Ada
Stéphane Carrez FOSDEM 2018
https://github.com/stcarrez/swagger-ada 2
OpenAPI and Swagger Ada
● Introduction to OpenAPI and Swagger
● Writing a REST Ada client
● Writing a REST Ada server
● Handling security with OAuth2
● Demo
https://github.com/stcarrez/swagger-ada 3
30 years of RPC
● Sun RPC (RFC 1057) in 1988
● CORBA IDL in 1991
● Ada95 Distributed Annex E in 1995
● Java RMI in 2000
● WSDL and SOAP in 2000
● Google gRPC with Protocol Buffers since 2001
https://github.com/stcarrez/swagger-ada 4
30 years but same goals
● Simplify the developer’s job
● Describe the protocol between client & server
● Generate client stubs and server skeleton
● Handle and hide communication details
● Document the client & server interaction
https://github.com/stcarrez/swagger-ada 5
Why REST and OpenAPI?
● REST as an alternative to SOAP since 2000
(Roy Thomas Fielding)
● Easier to use, write, implement, debug
● Can easily be used from browsers
● Increasing usage of REST with mobile applications
● Need for description, documentation
● Need for client language bindings
https://github.com/stcarrez/swagger-ada 6
OpenAPI Specification
● Started in 2010 to describe REST APIs
● OpenAPI Initiative created in Nov 5, 2015
(Google, Microsoft, IBM, Paypal, ...)
● OpenAPI 3.0 released July 26, 2017
● https://github.com/OAI/OpenAPI-Specification
https://github.com/stcarrez/swagger-ada 7
OpenAPI 2.0 Document Structure
info
security
securityDefinitions
consumesproduces
paths
tags externalDocs
definitions
parameters
responses
host
basePath
schemes
Describes security aspects
YAML or JSON file with well defined keywords
Describes REST APIs paths,
operations, can reference definitions,
parameters, responses
Describes data types, parameters,
responses
What the API accepts as input,
what it produces
https://github.com/stcarrez/swagger-ada 8
OpenAPI benefits
info
security
securityDefinitions
consumesproduces
paths
tags externalDocs
definitions
parameters
responses
host
basePath
schemes
Documentation
Client Binding
Server Skeleton
Server Configuration
Online Documentation
API Validation
https://github.com/stcarrez/swagger-ada 9
Swagger: Tools for OpenAPI
● Online Editor: Swagger Editor
● Generator: Swagger Codegen
● Documentation: Swagger UI
● Sources: https://github.com/swagger-api
SWAGGER
https://github.com/stcarrez/swagger-ada 10
Swagger Editor:
https://editor.swagger.io
https://github.com/stcarrez/swagger-ada 11
Swagger Codegen
OpenAPI
Document
YAML
JSON{ }
{...}
Swagger
Codegen
API
Doc
(HTML)
Ada
REST
Client
Ada
REST
Server
Java
REST
Client
Java
REST
Server
...
Python
REST
Client
Python
Flask
Server
...
25+
Programming Languages
https://github.com/stcarrez/swagger-ada 12
Writing a REST Ada client
● Get the OpenAPI/Swagger description file
– From SwaggerHub: https://swaggerhub.com/
– From APIs.guru: https://apis.guru/openapi-directory/
● Generate the Ada client code
● Use the generated code to make API calls
https://github.com/stcarrez/swagger-ada 13
OpenAPI: Info description (1/3)
● YAML or JSON file
● General purpose description of the API
● Describe the service entry point
swagger: "2.0"
info:
version: "1.0"
title: "Todo API"
contact:
email: Stephane.Carrez@gmail.com
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: localhost:8080
basePath: /v1
tags:
- name: tasks
description: Operations to manage tasks
schemes:
- https
- http
https://github.com/stcarrez/swagger-ada 14
OpenAPI: REST operation (2/3)
● Describe the REST operations
paths:
/todos:
get:
tags:
- tasks
summary: List the available tasks
description: List the available tasks
operationId: listTodos
produces:
- application/json
parameters:
- name: status
in: query
description: Filters the task by their status
required: false
type: string
enum:
- done
- waiting
- working
- all
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Todo'
'400':
description: Invalid status value
https://github.com/stcarrez/swagger-ada 15
OpenAPI: Model definitions (3/3)
definitions:
Todo:
type: object
properties:
id:
type: integer
format: int64
description: The todo identifier
title:
type: string
description: The todo title
create_date:
type: string
format: date-time
description: The todo creation date
done_date:
type: string
format: date-time
description: The todo resolution date
status:
type: string
description: The todo state
enum:
- waiting
- done
required:
- id
- title
- status
- create_date
https://github.com/stcarrez/swagger-ada 16
Client: let’s generate the code!
● Generate the client code with Swagger Codegen
$ java -jar swagger-codegen-cli.jar generate -l ada -i todo.yaml 
-DprojectName=Todos --model-package Todos
Client API: package Todos.Clients
Model API: package Todos.Models
Sample: procedure Todos.Client
GNAT project
https://github.com/stcarrez/swagger-ada 17
Ada REST Client
Generated code
Your client code and application
Swagger runtime
Choose between libcurl or AWS
Brings security with OAuth2 support
Brings JSON/XML serialization
deserialization and more
Ada Security
Swagger Ada
Ada Utility Library
CURL AWS
Client API & Model
Client Application
XML/Ada
https://github.com/stcarrez/swagger-ada 18
Client and Server Data Model
● Data types described in the Models package
● Same Models Ada package for client and server
● Operations to serialize and deserialize (JSON/XML)
package Todos.Models is
   type Todo_Type is record
      Id          : Swagger.Long;
      Title       : Swagger.UString;
      Create_Date : Swagger.Datetime;
      Done_Date   : Swagger.Nullable_Date;
      Status      : Swagger.UString;
   end record;
   package Todo_Type_Vectors is
      new Ada.Containers.Vectors
        (Positive, Todo_Type);
end Todos.Models;
Todo:
type: object
properties:
id:
type: integer
format: int64
description: The todo identifier
title:
type: string
description: The todo title
create_date:
type: string
format: date-time
description: The todo creation date
done_date:
type: string
format: date-time
description: The todo resolution date
status:
type: string
description: The todo state
enum:
- waiting
- done
https://github.com/stcarrez/swagger-ada 19
Client API
● Represented by the Client_Type tagged record
● Provides operations described by the OpenAPI
● Allows to control the API call (headers, security)
package Todos.Clients is
   type Client_Type is
      new Swagger.Clients.Client_Type with null record; 
   
   procedure Create_Todo (Client : in out Client_Type;
                          Title  : in Swagger.Ustring;
                          Result : out Todos.Models.Todo_Type);
   procedure List_Todos (Client : in out Client_Type;
                         Status : in out Swagger.Nullable_UString;
                         Result : out Todos.Models.Todo_Vector);
end Todos.Clients;
https://github.com/stcarrez/swagger-ada 20
Calling REST in Ada
● Declare a Client_Type instance
● Configure it (server URL, credentials)
● Call the operation with its parameters
with Todos.Clients;
with Todos.Models;
...
  Client : Todos.Clients.Client_Type;
  List   : Todos.Models.Todo_Type_Vectors.Vector;
  Empty  : Swagger.Nullable_String := (Is_Null => True, Value => <>);
  ...
    Client.Set_Server (“http://localhost:8080/v1”);
    Client.List_Todos (Empty, List);
https://github.com/stcarrez/swagger-ada 21
Writing a REST Ada server
● Write the OpenAPI/Swagger description file
● Generate the Ada server code
● Implement the server operations
● Share the OpenAPI description on SwaggerHub!
https://github.com/stcarrez/swagger-ada 22
Server: let’s generate the code!
$ java -jar swagger-codegen-cli.jar generate -l ada-server -i todo.yaml 
-DprojectName=Todos --model-package Todos
● Generate the server code with Swagger Codegen
Server skeleton: package Todos.Skeletons
Model API: package Todos.Models
Server: procedure Todos.Server
GNAT project, server configuration file
Server code: package Todos.Servers
https://github.com/stcarrez/swagger-ada 23
Ada REST Server
Generated code
Your server code and application
Swagger runtime
Brings REST server support with
security and OAuth2 support on
server side
Ada Security
Swagger Ada
Ada Utility Library
Server Skeleton & Model
Server Application
Ada Servlet
XML/Ada AWS
https://github.com/stcarrez/swagger-ada 24
Server Skeleton
● Declares the Server_Type limited interface to describe the operations
● Additional Context_Type object gives access to request, response
● Two generic packages for server skeleton provide two server models:
– Instance per request
– Global shared instance within a protected object
package Todos.Skeletons is
   type Server_Type is limited interface;
   
   procedure Create_Todo
      (Server  : in out Server_Type;
       Title   : in Swagger.Ustring;
       Result  : out Todos.Models.Todo_Type;
       Context : in out Swagger.Servers.Context_Type) is abstract;
   ...
end Todos.Skeletons;
https://github.com/stcarrez/swagger-ada 25
Server Implementation (1/2)
● Implement the Server_Type interface with its operations
● Populate Result or use the Context to send an error
● Serialization/Deserialization handled by the skeleton
package Todos.Servers is
   type Server_Type is limited new Todos.Skeletons.Server_Type ...
   
   overriding procedure Create_Todo
      (Server  : in out Server_Type;
       Title   : in Swagger.Ustring;
       Result  : out Todos.Models.Todo_Type;
       Context : in out Swagger.Servers.Context_Type);
   ...
end Todos.Servers;
https://github.com/stcarrez/swagger-ada 26
Server Implementation (2/2)
● Instantiate one of the two server skeletons
(per-request model or shared model)
● Register the OpenAPI to the application
package Todos.Servers is
   ...
   package Server_Impl is
      new Todos.Skeletons.Shared_Instance (Server_Type);
end Todos.Servers;
procedure Todos.Server is
   App : aliased Swagger.Servers.Applications.Application_Type;
begin
   . . .
   Todos.Servers.Server_Impl.Register (App);
   . . .
end Todos.Server;
https://github.com/stcarrez/swagger-ada 27
OpenAPI: Describing security
● Describe security endpoints
● Describe security scopes
● Assign required security scopes to operations
paths:
/todos:
get:
...
parameters:
...
responses:
...
security:
- todo_auth:
- 'read:todo'
Security:
- todo_auth: []
securityDefinitions:
todo_auth:
type: oauth2
flow: password
tokenUrl: /v1/oauth/token
scopes:
'write:todo': Write a todo
'read:todo': Read a todo
https://github.com/stcarrez/swagger-ada 28
Client Security with OAuth2 (1/2)
● Create and initialize a credentials object
● Obtain the access token and optional refresh token
● Configure the client to use the credentials
with Swagger.Credentials.OAuth;
Cred : aliased Swagger.Credentials.OAuth.OAuth2_Credential_Type;
...
   Cred.Set_Application_Identifier ("todo­app");
   Cred.Set_Application_Secret ("todo­app­secret");
   Cred.Set_Provider_URI ("http://localhost:8080/v1/oauth/token");
   Cred.Request_Token (Username, Password, "read:todo write:todo");
...
   Client.Set_Credentials (Cred’Access);
https://github.com/stcarrez/swagger-ada 29
Client Security with OAuth2 (2/2)
● Make API calls: credentials are passed on the wire within the
‘Authorization’ header
List : Todos.Models.Todo_Type_Vectors.Vector;
...
   Client.List_Todos (Empty, List);
GET /v1/todos HTTP/1.1
Host: localhost:8080
Authorization: Bearer 74rE0wU.d44CPAll_kyyB2krd8bYdVYWqgmtloIR.9zyiBM
Accept: application/json
https://github.com/stcarrez/swagger-ada 30
Server security (1/2)
● Each OpenAPI scope represented by a
permission definition (generated code):
● Authentication and permission check generated in
the server skeleton (generated code):
if not Context.Is_Authenticated then
   Context.Set_Error (401, "Not authenticated");
   return;
end if;
if not Context.Has_Permission (ACL_Read_Todo.Permission) then
   Context.Set_Error (403, "Permission denied");
   return;
end if;
package ACL_Read_Todo
   is new Security.Permissions.Definition ("read:todo");
https://github.com/stcarrez/swagger-ada 31
Server security (2/2)
● Configure the server key for OAuth2 tokens:
● Configure the server to register the client id and secret
● Configure the users allowed to authenticate
app.list=1
app.1.client_id=todo­app
app.1.client_secret=todo­app­secret
app.1.scope=none
users.list=1,2
users.1.username=admin
users.1.password=admin
users.2.username=test
users.2.password=test
swagger.key=Y29naGk5SGkKUG9YaTdhaHgKYWlUaGllM3UK
https://github.com/stcarrez/swagger-ada 32
Demo: Todo client
https://github.com/stcarrez/swagger-ada 33
Demo: Todo server (main)
https://github.com/stcarrez/swagger-ada 34
Demo: Todo server (impl)
https://github.com/stcarrez/swagger-ada 35
Demo: Running the client
Server not started
404 error received
https://github.com/stcarrez/swagger-ada 36
Limitations and improvements
● Ada Strings
(need a lot of To_String/To_Ustring conversions)
● Enums are treated as strings
● Circular type dependencies not handled
● Error model needs some work
● Improvements:
– Upload file support
– Asynchronous client operation call
https://github.com/stcarrez/swagger-ada 37
Conclusion
● OpenAPI describes REST APIs
● Swagger Codegen generates Ada code for you
● Swagger Ada is a runtime library for REST
client and REST server implementation
● More than 500 APIs available, write your own!
● Next step: … GraphQL?

More Related Content

What's hot (20)

PPTX
API Docs with OpenAPI 3.0
Fabrizio Ferri-Benedetti
 
PDF
OpenAPI 3.0, And What It Means for the Future of Swagger
SmartBear
 
PDF
Intro to GraphQL
Rakuten Group, Inc.
 
PPTX
OpenAPI at Scale
Nordic APIs
 
PPT
Introduction to the Web API
Brad Genereaux
 
PPTX
Rest API
Rohana K Amarakoon
 
PPTX
Api types
Sarah Maddox
 
PPTX
What is an API
Elliott Richmond
 
PPTX
Api testing
Keshav Kashyap
 
PPTX
REST API Design & Development
Ashok Pundit
 
PDF
Space Camp June 2022 - API First.pdf
Postman
 
PPTX
What is Swagger?
Philip Senger
 
PPTX
Understanding REST APIs in 5 Simple Steps
Tessa Mero
 
PPTX
Introducing OpenAPI Version 3.1
SmartBear
 
KEY
Web API Basics
LearnNowOnline
 
PPTX
Introduction to GraphQL
Rodrigo Prates
 
PDF
Amazon API Gateway
Mark Bate
 
PPSX
Rest api standards and best practices
Ankita Mahajan
 
PPTX
Introducing Swagger
Tony Tam
 
API Docs with OpenAPI 3.0
Fabrizio Ferri-Benedetti
 
OpenAPI 3.0, And What It Means for the Future of Swagger
SmartBear
 
Intro to GraphQL
Rakuten Group, Inc.
 
OpenAPI at Scale
Nordic APIs
 
Introduction to the Web API
Brad Genereaux
 
Api types
Sarah Maddox
 
What is an API
Elliott Richmond
 
Api testing
Keshav Kashyap
 
REST API Design & Development
Ashok Pundit
 
Space Camp June 2022 - API First.pdf
Postman
 
What is Swagger?
Philip Senger
 
Understanding REST APIs in 5 Simple Steps
Tessa Mero
 
Introducing OpenAPI Version 3.1
SmartBear
 
Web API Basics
LearnNowOnline
 
Introduction to GraphQL
Rodrigo Prates
 
Amazon API Gateway
Mark Bate
 
Rest api standards and best practices
Ankita Mahajan
 
Introducing Swagger
Tony Tam
 

Similar to Writing REST APIs with OpenAPI and Swagger Ada (20)

PPTX
Rest API with Swagger and NodeJS
Luigi Saetta
 
PDF
Presentation at the 2016 Linux Foundation Collab Summit
Open API Initiative (OAI)
 
PDF
Enforcing API Design Rules for High Quality Code Generation
Tim Burks
 
PDF
Schema-First API Design
Yos Riady
 
PPTX
Super simple introduction to REST-APIs (2nd version)
Patrick Savalle
 
PDF
Designing APIs with Swagger and OpenAPI 1st Edition Joshua S. Ponelat
tatajebezad
 
PDF
Apidays Paris 2023 - API design first: A case for a better language, Emmanu...
apidays
 
PPTX
OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0
Scott Lee Davis
 
PPTX
Swagger & OpenAPI Spec #openapi
Muhammad Siddiqi
 
PPTX
The Swagger Format becomes the Open API Specification: Standardizing descript...
3scale
 
PDF
OpenAPI and gRPC Side by-Side
Tim Burks
 
PDF
LF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat
 
PDF
Swagger: Restful documentation that won't put you to sleep
Tobias Coetzee
 
PPTX
REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
Hiranya Jayathilaka
 
PDF
9 Months and Counting with Jeff Borek of IBM OpenAPI Meetup 2016 09 15
Open API Initiative (OAI)
 
PPTX
SVQdotNET: Building APIs with OpenApi
Juan Luis Guerrero Minero
 
PDF
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
PPTX
Open API Specification - SiliconValley Code camp 2017 session @siddiqimuhammad
Muhammad Siddiqi
 
PDF
API Design in the Modern Era - Architecture Next 2020
Eran Stiller
 
PDF
Eran Stiller: API design in the modern era - architecture next 2020
CodeValue
 
Rest API with Swagger and NodeJS
Luigi Saetta
 
Presentation at the 2016 Linux Foundation Collab Summit
Open API Initiative (OAI)
 
Enforcing API Design Rules for High Quality Code Generation
Tim Burks
 
Schema-First API Design
Yos Riady
 
Super simple introduction to REST-APIs (2nd version)
Patrick Savalle
 
Designing APIs with Swagger and OpenAPI 1st Edition Joshua S. Ponelat
tatajebezad
 
Apidays Paris 2023 - API design first: A case for a better language, Emmanu...
apidays
 
OWASP PDX May 2016 : Scanning with Swagger (OAS) 2.0
Scott Lee Davis
 
Swagger & OpenAPI Spec #openapi
Muhammad Siddiqi
 
The Swagger Format becomes the Open API Specification: Standardizing descript...
3scale
 
OpenAPI and gRPC Side by-Side
Tim Burks
 
LF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat
 
Swagger: Restful documentation that won't put you to sleep
Tobias Coetzee
 
REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
Hiranya Jayathilaka
 
9 Months and Counting with Jeff Borek of IBM OpenAPI Meetup 2016 09 15
Open API Initiative (OAI)
 
SVQdotNET: Building APIs with OpenApi
Juan Luis Guerrero Minero
 
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
Open API Specification - SiliconValley Code camp 2017 session @siddiqimuhammad
Muhammad Siddiqi
 
API Design in the Modern Era - Architecture Next 2020
Eran Stiller
 
Eran Stiller: API design in the modern era - architecture next 2020
CodeValue
 
Ad

More from Stephane Carrez (9)

PDF
Automating License Identification with SPDX-Tool in Ada
Stephane Carrez
 
PDF
Implementing a build manager in Ada
Stephane Carrez
 
PDF
Porion a new Build Manager
Stephane Carrez
 
PDF
Protect Sensitive Data with Ada Keystore
Stephane Carrez
 
PDF
AKT un outil pour sécuriser vos données et documents sensibles
Stephane Carrez
 
PDF
Ada for Web Development
Stephane Carrez
 
PDF
Secure Web Applications with AWA
Stephane Carrez
 
PDF
Persistence with Ada Database Objects (ADO)
Stephane Carrez
 
PDF
IP Network Stack in Ada 2012 and the Ravenscar Profile
Stephane Carrez
 
Automating License Identification with SPDX-Tool in Ada
Stephane Carrez
 
Implementing a build manager in Ada
Stephane Carrez
 
Porion a new Build Manager
Stephane Carrez
 
Protect Sensitive Data with Ada Keystore
Stephane Carrez
 
AKT un outil pour sécuriser vos données et documents sensibles
Stephane Carrez
 
Ada for Web Development
Stephane Carrez
 
Secure Web Applications with AWA
Stephane Carrez
 
Persistence with Ada Database Objects (ADO)
Stephane Carrez
 
IP Network Stack in Ada 2012 and the Ravenscar Profile
Stephane Carrez
 
Ad

Recently uploaded (20)

PDF
From Chaos to Clarity: Mastering Analytics Governance in the Modern Enterprise
Wiiisdom
 
PDF
Difference Between Kubernetes and Docker .pdf
Kindlebit Solutions
 
PPTX
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
PDF
interacting-with-ai-2023---module-2---session-3---handout.pdf
cniclsh1
 
PPTX
EO4EU Ocean Monitoring: Maritime Weather Routing Optimsation Use Case
EO4EU
 
PPTX
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
PPTX
Feb 2021 Cohesity first pitch presentation.pptx
enginsayin1
 
PPTX
Perfecting XM Cloud for Multisite Setup.pptx
Ahmed Okour
 
PDF
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
PPTX
Java Native Memory Leaks: The Hidden Villain Behind JVM Performance Issues
Tier1 app
 
PPTX
Automatic_Iperf_Log_Result_Excel_visual_v2.pptx
Chen-Chih Lee
 
PDF
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
PPTX
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
PPTX
A Complete Guide to Salesforce SMS Integrations Build Scalable Messaging With...
360 SMS APP
 
PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PPTX
An Introduction to ZAP by Checkmarx - Official Version
Simon Bennetts
 
PDF
2025年 Linux 核心專題: 探討 sched_ext 及機器學習.pdf
Eric Chou
 
PPTX
Quality on Autopilot: Scaling Testing in Uyuni
Oscar Barrios Torrero
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
From Chaos to Clarity: Mastering Analytics Governance in the Modern Enterprise
Wiiisdom
 
Difference Between Kubernetes and Docker .pdf
Kindlebit Solutions
 
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
interacting-with-ai-2023---module-2---session-3---handout.pdf
cniclsh1
 
EO4EU Ocean Monitoring: Maritime Weather Routing Optimsation Use Case
EO4EU
 
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
Feb 2021 Cohesity first pitch presentation.pptx
enginsayin1
 
Perfecting XM Cloud for Multisite Setup.pptx
Ahmed Okour
 
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
Java Native Memory Leaks: The Hidden Villain Behind JVM Performance Issues
Tier1 app
 
Automatic_Iperf_Log_Result_Excel_visual_v2.pptx
Chen-Chih Lee
 
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
A Complete Guide to Salesforce SMS Integrations Build Scalable Messaging With...
360 SMS APP
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
An Introduction to ZAP by Checkmarx - Official Version
Simon Bennetts
 
2025年 Linux 核心專題: 探討 sched_ext 及機器學習.pdf
Eric Chou
 
Quality on Autopilot: Scaling Testing in Uyuni
Oscar Barrios Torrero
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 

Writing REST APIs with OpenAPI and Swagger Ada