89
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted API First Strategy Design, Develop, and Manage APIs on the Cloud Young Gyu Kim Principal Sales Consultant Oracle Korea, Cloud Platform August 30, 2017

API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

  • Upload
    others

  • View
    39

  • Download
    0

Embed Size (px)

Citation preview

Page 1: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

API First StrategyDesign, Develop, and Manage APIs on the Cloud

Young Gyu Kim Principal Sales Consultant Oracle Korea, Cloud Platform August 30, 2017

Page 2: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Confidential – Oracle Internal/Restricted/Highly Restricted 2

Page 3: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 3

Page 4: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

Program Agenda

Open API Initiative & Open API Specification

How to Design an API

How to Develop an API

How to Test an API

How to Deploy an API

How to Manage an API

1

2

3

4

5

4

6

Page 5: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

Open API Initiative & SpecificationOAI OAS

5

Page 6: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

6

2011.07

2013.04

2013.09

2014.05

2015.11

2016.01

2017.04

SwaggerInitial

Commit

OPEN API InitiativeOpenAPI Spec 2.0

(Swagger Spec 2.0)

API BlueprintInitial

Commit

Swagger Spec 2.0GlueCon 2014

in Colorado

API Blueprint Joined OAI

RAMLInitial

Commit

RAML

Joined OAI

2017.07

Swagger Spec 3.0

Page 7: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 7

MuleSoft Joins the OpenAPI Initiative: The End of the API Spec Wars

Page 8: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 8

Open API and RAML: Better Together

Page 9: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 9

Page 10: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 10

Page 11: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 11

Page 12: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 12

Page 13: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

How to Design an APISwagger, API Blueprint, RAML

13

Page 14: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 14

Transform API Descriptions https://apimatic.io/transformer

Page 15: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 15

Apiary supports Swagger

Page 16: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 16

Page 17: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 17

API Blueprint Editor

Page 18: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 18

Swagger Editor

Page 19: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 19

Validate API Spec

Page 20: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 20

Preview

Page 21: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 21

Github Integration

Page 22: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 22

API Documentation

Page 23: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 23

TEST through Mock Server

Page 24: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 24

TEST through production Server

Page 25: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 25

Request / Response Header

Page 26: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 26

Response Data

Page 27: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Generate Client Source (Code Snippet)cURL, Java, Javascript, Node.JS, Perl, Python, PHP, Ruby, Go, C#, Visual Basic, Groovy, Object-C, Swift

27

Page 28: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 28

Page 29: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 29

Java Source Code (maven)

<dependencies><dependency>

<groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-client</artifactId><version>2.8</version>

</dependency><dependency>

<groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>2.8</version>

</dependency></dependencies>

Page 30: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 30

package com.apiarytest.msr.msrclient;

import javax.ws.rs.client.Client;import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.client.Entity;import javax.ws.rs.core.Response;import javax.ws.rs.core.MediaType;

public class ApiCustomer {public static void main(String[] args) {

Client client = ClientBuilder.newClient();Response response = client.target("https://private-15a7b-credemol.apiary-mock.com/search")

.request(MediaType.TEXT_PLAIN_TYPE).get();

System.out.println("status: " + response.getStatus());System.out.println("headers: " + response.getHeaders());System.out.println("body:" + response.readEntity(String.class));

}}

Page 31: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 31

Page 32: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 32

Page 33: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 33

Generate Server (eg, spring boot)

Page 34: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 34

Page 35: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 35

Generate Client (eg, java client)

Page 36: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 36

Page 37: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 37

Design YAML editor with basic style validationCloud-based YAML editor with predesigned templates, simultaneous style feedback, mocking, and

hosting for API definitions

Develop Code generation with Swagger CodeGenCode generation in 20+ server languages, which can automatically sync with source control hosts like

GitHub, Bitbucket, and GitLab

DocumentInteractive API documentation and

sandbox with SwaggerUI

Interactive API documentation and sandbox, and auto-generation for client SDKs, all hosted in the

cloud with privacy controls

Mock NO Generate a mock of your API to virtualize operations without writing any code

Host NOSecure cloud-based hosting for Swagger definitions and API documentation, with built-in access

controls

Collaborate NOReal-time issue tracking and conversations, team management, role assignment, and permission/

access controls

Deploy NOQuickly deploy your API definitions to API Gateways such as AWS , Microsoft Azure and IBM API

Connect. Automatically generate AWS Lambda functions for serverless deployments.

Version NO Manage multiple versions of API definitions, and retire outdated APIs

Page 38: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 38

Page 39: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 39

Transform API Descriptions to formats of your choice

Page 40: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 40

Page 41: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 41

Page 42: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 42

Page 43: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 43

Page 44: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

How to Develop an APISwagger Codegen

44

Page 45: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 45

https://github.com/swagger-api/swagger-codegenInstall Swagger Codegen

$ wget http://central.maven.org/maven2/io/swagger/swagger-codegen-cli/2.2.3/swagger-codegen-cli-2.2.3.jar -O swagger-codegen-cli.jar

$ java -jar swagger-codegen-cli.jar

$ brew install swagger-codegen

Java Version

Homebrew (OS X)

Page 46: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• Erlang• Node.js• PHP Lumen• PHP Slim• PHP Silex• Python Flask (Connexion)• Python2 Flask (Connexion)• Ruby on Rails5• Ruby Sinatra• Scala Scalatra• Haskell Servant• ASP.NET Core 1.0• Go Server• NancyFX

46

Swagger Codegen (Server Stub): 23• Java JAX-RS 2.0 spec• Java JAX-RS (Java JAX-RS (Jersey)• Java JAX-RS (Apache CXF 2 / 3)• Java JAX-RS (Resteasy)• Java JAX-RS (Apache CXF

framework on Java EE server supporting CDI)

• Java Spring MVC• Java SpringBoot• Java Undertow• Java MSF4J

Page 47: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• async-scala

• csharp

• cpprest (C++, https://github.com/Microsoft/cpprestsdk)

• dart

• flash

• go

• groovy

• java

• jaxrs-cxf-client

• javascript

• javascript-closure-angular

47

Swagger Codegen (API Client): 32• jmeter

• nancyfx

• nodejs-server

• objc

• perl

• php

• python

• qt5cpp (C++, https://www.qt.io/)

• ruby

• scala

• swift

• swift3

• tizen

• typescript-angular2

• typescript-angular

• typescript-node

• typescript-fetch

• akka-scala

• CsharpDotNet2

• clojure

• haskell

Page 48: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 48

swagger-codegen-cli generate [(-a <authorization> | --auth <authorization>)] [--additional-properties <additional properties>...] [--api-package <api package>] [--artifact-id <artifact id>] [--artifact-version <artifact version>] [(-c <configuration file> | --config <configuration file>)] [-D <system properties>...] [--git-repo-id <git repo id>] [--git-user-id <git user id>] [--group-id <group id>] [--http-user-agent <http user agent>] (-i <spec file> | --input-spec <spec file>) [--ignore-file-override <ignore file override location>] [--import-mappings <import mappings>...] [--instantiation-types <instantiation types>...] [--invoker-package <invoker package>] (-l <language> | --lang <language>) [--language-specific-primitives <language specific primitives>...] [--library <library>] [--model-name-prefix <model name prefix>] [--model-name-suffix <model name suffix>] [--model-package <model package>] [(-o <output directory> | --output <output directory>)] [--release-note <release note>] [--remove-operation-id-prefix] [--reserved-words-mappings <reserved word mappings>...] [(-s | --skip-overwrite)] [(-t <template directory> | --template-dir <template directory>)] [--type-mappings <type mappings>...] [(-v | --verbose)]

Page 49: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 49

Generate SpringBoot application

$ swagger-codegen generate -v -i "swagger-msr.yaml" \ -l "spring" -o "acme-msr-api" \ --api-package "com.acme.msr.api" \ --model-package "com.acme.msr.model" \ --model-name-suffix "VO" \ --artifact-id "acme-msr-api" \ --group-id "com.acme.msa"

$ cd acme-msr-api

$ mvn clean package

$ mvn spring-boot:run

Page 50: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 50

Page 51: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 51

http://localhost:8080/api/swagger-ui.html

Page 52: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 52

http://localhost:8080/api/api-docs (api-docs.json)

Page 53: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 53

Swagger2StringBoot.java@SpringBootApplication @EnableSwagger2 @EnableJpaRepositories("com.acme.msr.repository") @ComponentScan(basePackages = { "io.swagger","com.acme.msr.service","com.acme.msr.api" }) @EntityScan("com.acme.msr.entity") public class Swagger2SpringBoot implements CommandLineRunner {

@Override public void run(String... arg0) throws Exception { if (arg0.length > 0 && arg0[0].equals("exitcode")) { throw new ExitException(); } }

... }

Page 54: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 54

SeatApiController.java - findSeats() public ResponseEntity<List<SeatVO>> findSeats(@ApiParam(value = "seatNo to filter by") @RequestParam(value = "seatNo", required = false) String seatNo, @ApiParam(value = "maximum number of results to return") @RequestParam(value = "limit", required = false) Integer limit) {

List<Seat> seats = null; if(seatNo == null || seatNo.trim().length() == 0) { seats = new ArrayList<Seat>(); seatRepository.findAll().iterator().forEachRemaining(seats::add); } else { seats = seatRepository.findBySeatNoLike(seatNo); } List<SeatVO> voList = seats.stream().map(this::convertToVO).collect(Collectors.toList());

return new ResponseEntity<List<SeatVO>>(voList, HttpStatus.OK); }

Page 55: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 55

Service 를 활용한 비즈니스 로직 추상화

public ResponseEntity<List<SeatVO>> findSeats(@ApiParam(value = "seatNo to filter by") @RequestParam(value = "seatNo", required = false) String seatNo, @ApiParam(value = "maximum number of results to return") @RequestParam(value = "limit", required = false) Integer limit) {

List<Seat> seats = seatService.findSeats(seatNo);

List<SeatVO> voList = seats.stream().map(this::convertToVO).collect(Collectors.toList()); return new ResponseEntity<List<SeatVO>>(voList, HttpStatus.OK);

return new ResponseEntity<List<SeatVO>>(voList, HttpStatus.OK); }

Page 56: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 56

Generate Node.JS application

$ swagger-codegen generate -v -i swagger-petstore.yaml -l nodejs-server -o swagger-petstore-nodejs$ cd swagger-petstore-nodejs

$ npm start

#$ npm install #$ node index

Page 57: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 57

http://localhost:8080/docs

Page 58: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 58

Page 59: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

HTTP API Testing FrameworkDredd

59

Page 60: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 60

Page 61: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 61

Supported API Descriptions Format

Page 62: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 62

Supported Hooks Languages

Page 63: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 63

Page 64: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 64

Supported Systems (OS & CI)

Page 65: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 65

Page 66: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 66

Page 67: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 67

Page 68: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 68

run dredd with hooks file$ dredd ../swagger-msr.yaml http://localhost:8080 -f hooks.js

info: Beginning Dredd testing... info: Found Hookfiles: 0=/Users/nicholas/git/api-first-strategy/dredd/hooks.js pass: GET /api/seats duration: 80ms fail: POST /api/seats duration: 21ms pass: GET /api/seats/1 duration: 24ms fail: PUT /api/seats/1 duration: 13ms fail: DELETE /api/seats/1 duration: 23ms fail: GET /api/reservations?status=available duration: 25ms fail: POST /api/reservations duration: 16ms fail: GET /api/reservations/findByUser/1 duration: 21ms fail: GET /api/reservations/1 duration: 26ms fail: DELETE /api/reservations/1 duration: 14ms fail: PUT /api/reservations/1 duration: 17ms info: Displaying failed tests... fail: POST /api/seats duration: 21ms fail: headers: Header 'content-type' is missing

Page 69: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 69

hooks.js

var hooks = require('hooks');

hooks.beforeEachValidation(function(transaction, done) { var contentType = transaction.real.headers['content-type']; console.log("#### BefereEachValidation contentType", contentType);

if(contentType === 'application/json;charset=UTF-8') { transaction.real.headers['content-type'] = 'application/json'; }

done(); });

Page 70: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

How to deploy an APICloud, Docker, OnPremises

70

Page 71: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 71

There are many options to deploy your API

On Premise Data Center Cloud Data Center Container

Page 72: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 72

Run API on the Cloud

Page 73: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 73

Polyglots

Page 74: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 74

Page 75: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 75

Page 76: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 76

Page 77: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 77

Page 78: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 78

Deploy API to Docker Container

$ mvn package$ vi Dockerfile

$ docker build -t acme-msr-api:1 .$ docker run -d --name acme-msr-api -p 8080:8080 acme-msr-api:1

FROM openjdk:8-jdk-alpine COPY target/acme-msr-api-1.0.0.jar /deployments/

CMD java -jar /deployments/acme-msr-api-1.0.0.jar

Page 79: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 79

Page 80: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted

How to Manage an APIAPI Gateway

80

Page 81: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 81

Need for an API

Page 82: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 82

Page 83: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. |

Management Service

GatewaysGatewaysGateways

APIs

Sales Cloud

ABCS

ICS

ServicesDMZ (Optional)

Cloud or On-Premise

Management PortalDeveloper Portal

Applications

Custom

On-Premise

Page 84: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 84

One design, many instances.Centralized API Design, Distributed API Runtime

Oracle Cloud

Amazon, Azure, other

clouds

On Premises

Gateways

Page 85: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 85

API Management using Policies

https://youtu.be/wN2xMjCDN6Y

Page 86: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 86

Publish API using Apiary

https://youtu.be/9kF8SXcLpNI

Page 87: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 87

Page 88: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 88

Page 89: API First Strategy · • ASP.NET Core 1.0 • Go Server • NancyFX 46 Swagger Codegen (Server Stub): 23 • Java JAX-RS 2.0 spec • Java JAX-RS (Java JAX-RS (Jersey) • Java JAX-RS