SlideShare una empresa de Scribd logo
1 de 97
Descargar para leer sin conexión
Take a Groovy REST!
by Guillaume Laforge
@glaforge
Promo Code: ctwjavaone
http://www.manning.com/koenig2/
GROOVY
IN ACTION
2ND EDITION
We know
about
APIs!
http://restlet.com
We know
about
APIs!
http://restlet.com
@glaforge
APISpark — sign-up!
4
http://restlet.com
Quick intro to REST
ROY FIELDING
RESTDISSERTATION
ROY FIELDING
RESTDISSERTATION
Principled design
of the modern
Web architecture
@glaforge
Representational State Transfer
Architectural properties
• Performance
• Scalability
• Simplicity
• Modifiability
• Visibility
• Portability
• Reliability
Architectural constraints
• Client-server
• Stateless
• Cacheable
• Layered system
• Code on demand (optional)
• Uniform interface
8
@glaforge
REST — Uniform interface
• Identification of resources
• Manipulation of resources 

through representations
• Self-descriptive messages
• HATEOAS 

(Hypermedia As The Engine 

Of Application State)
9
@glaforge
REST — Uniform interface
• Identification of resources
• Manipulation of resources 

through representations
• Self-descriptive messages
• HATEOAS 

(Hypermedia As The Engine 

Of Application State)
9
Resource as URIs
http://api.co/cars/123
@glaforge
REST — Uniform interface
• Identification of resources
• Manipulation of resources 

through representations
• Self-descriptive messages
• HATEOAS 

(Hypermedia As The Engine 

Of Application State)
9
Resource as URIs
http://api.co/cars/123
JSON, XML…
@glaforge
REST — Uniform interface
• Identification of resources
• Manipulation of resources 

through representations
• Self-descriptive messages
• HATEOAS 

(Hypermedia As The Engine 

Of Application State)
9
Resource as URIs
http://api.co/cars/123
JSON, XML…
HTTP GET, POST, PUT, DELETE
media types, cacheability…
@glaforge
REST — Uniform interface
• Identification of resources
• Manipulation of resources 

through representations
• Self-descriptive messages
• HATEOAS 

(Hypermedia As The Engine 

Of Application State)
9
Resource as URIs
http://api.co/cars/123
JSON, XML…
HTTP GET, POST, PUT, DELETE
media types, cacheability…
Hypermedia APIs
HAL, JSON-LD, Siren…
@glaforge
HTTP methods / URIs for collection/item
10
GET
POST
PUT
DELETE
http://api.co/v2/cars/ http://api.co/v2/cars/1234
List all the cars Retrieve an individual car
Create a new car
Replace the entire collection
with a whole new list of cars
Replace or create
an individual car
Delete all the cars Delete an individual car
@glaforge
Common HTTP Status Codes — 1xx
11
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 2xx
12
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 3xx
13
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 4xx
14
@glaforge
Common HTTP Status Codes — 5xx
15
@glaforge
Common HTTP Status Codes — 5xx
15
@glaforge
Common HTTP Status Codes — 5xx
15
@glaforge
Common HTTP Status Codes — 5xx
15
REST — Server-side
@glaforge
Solutions for your REST backend
• Grails
• Ratpack
• Spring Boot
• gServ
• Restlet Framework
• any other 

Web framework!
17
May the Groovy
force be with you!
@glaforge
gServ
19
def gserv = new GServ()



def bkResource = gserv.resource("/people") {

get ":id", { id ->

def person = personService.get( id )

writeJson person

}



get "/", { ->

def persons = personService.all()

responseHeader "content-type", "application/json"

writeJSON persons

}

}



gserv.http {

static_root '/public/webapp'

get '/faq', file("App.faq.html")



}.start(8080)
@glaforge
Restlet Framework
20
@GrabResolver('http://maven.restlet.com')

@Grab('org.restlet.jse:org.restlet:2.3.2')

import org.restlet.*

import org.restlet.resource.*

import org.restlet.data.*

import org.restlet.routing.*

import static org.restlet.data.MediaType.*



class PeopleResource extends ServerResource {

@Get('json')

String toString() { "{'name': 'Luke Skywalker’}" }

}



new Server(Protocol.HTTP, 8183, PeopleResource).with { server ->

start()

new Router(server.context).attach("/people/{user}", PeopleResource)



assert new ClientResource('http://localhost:8183/people/1')

.get(APPLICATION_JSON).text.contains('Luke Skywalker')



stop()

}
@glaforge
Restlet Framework
20
@GrabResolver('http://maven.restlet.com')

@Grab('org.restlet.jse:org.restlet:2.3.2')

import org.restlet.*

import org.restlet.resource.*

import org.restlet.data.*

import org.restlet.routing.*

import static org.restlet.data.MediaType.*



class PeopleResource extends ServerResource {

@Get('json')

String toString() { "{'name': 'Luke Skywalker’}" }

}



new Server(Protocol.HTTP, 8183, PeopleResource).with { server ->

start()

new Router(server.context).attach("/people/{user}", PeopleResource)



assert new ClientResource('http://localhost:8183/people/1')

.get(APPLICATION_JSON).text.contains('Luke Skywalker')



stop()

}
Starts in
milliseconds
@glaforge
Ratpack
21
@Grab('io.ratpack:ratpack-groovy:0.9.17')

import static ratpack.groovy.Groovy.ratpack

import static groovy.json.JsonOutput.toJson



ratpack {

handlers {

get("/people/:id") {

respond byContent.json {

response.send toJson(

[name: 'Luke Skywalker'])

}

}

}

}
@glaforge
Ratpack
21
@Grab('io.ratpack:ratpack-groovy:0.9.17')

import static ratpack.groovy.Groovy.ratpack

import static groovy.json.JsonOutput.toJson



ratpack {

handlers {

get("/people/:id") {

respond byContent.json {

response.send toJson(

[name: 'Luke Skywalker'])

}

}

}

}
Booh! Ratpack
0.9.17???
@glaforge
Ratpack 1.0 is out!
22
@glaforge
Ratpack
23
@Grab(’org.slf4j:slf4j-simple:1.7.12’)
@Grab(’io.ratpack:ratpack-groovy:1.0.0’)
import static ratpack.groovy.Groovy.ratpack
import static ratpack.groovy.Groovy.htmlBuilder as h
import static ratpack.jackson.Jackson.json as j
ratpack {
handlers {
get { render "foo"}
get("people/:id") {
byContent {
json {
render j(name: "Luke Skywalker")
}
html {
render h {
p "Luke Skywalker"
}
}
@glaforge
Ratpack
24
Beep, let’s move to
the client side of the
REST force!
REST client-side
REST client-side
@glaforge
REST clients — Web, Java, Android
Web browser

(client-side JavaScript)
• Raw AJAX, jQuery
• Angular’s http request,
Restangular
• Restful.js
+ GrooScript! :-)
Java-based app 

(Android or Java backend)
• Groovy wslite
• Groovy HTTPBuilder
• RetroFit / OkHttp
• Restlet Framework
27
WEB
@glaforge
Restful.js (+ GrooScript ?)
29
JAVA
JAVA& GROOVY
@glaforge
new URL(‘…’).text… or not?
31
'https://starwars.apispark.net/v1/people/1'.toURL().text
@glaforge
new URL(‘…’).text… or not?
31
'https://starwars.apispark.net/v1/people/1'.toURL().text
getText() will do
an HTTP GET
on the URL
403
403The API doesn’t
accept a Java user
agent
@glaforge
Know your GDK!
33
@glaforge
new URL(‘…’).text… take 2!
34
'https://starwars.apispark.net/v1/people/1'

.toURL()

.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept' : 'application/json'])
@glaforge
new URL(‘…’).text… take 2!
34
'https://starwars.apispark.net/v1/people/1'

.toURL()

.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept' : 'application/json'])
Let’s ask for
JSON payload
@glaforge
Now JSON-parsed…
35
import groovy.json.*



assert new JsonSlurper().parseText(

'https://starwars.apispark.net/v1/people/1'

.toURL()

.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept': 'application/json'])

).name == 'Luke Skywalker'
@glaforge
…and spockified!
36
class StarWars extends Specification {

def "retrieve Luke"() {

given: "a URL to the resource"

def url = 'https://starwars.apispark.net/v1'.toURL()



when: "I retrieve and parse the people/1"

def parsed = url.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept': 'application/json'])



then: "I expect to get Luke"

parsed.contains "Luke Skywalker"

}

}
@glaforge
…and spockified!
36
class StarWars extends Specification {

def "retrieve Luke"() {

given: "a URL to the resource"

def url = 'https://starwars.apispark.net/v1'.toURL()



when: "I retrieve and parse the people/1"

def parsed = url.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept': 'application/json'])



then: "I expect to get Luke"

parsed.contains "Luke Skywalker"

}

}
Neat for GET,
but not other
methods
supported
@glaforge
…and spockified!
36
class StarWars extends Specification {

def "retrieve Luke"() {

given: "a URL to the resource"

def url = 'https://starwars.apispark.net/v1'.toURL()



when: "I retrieve and parse the people/1"

def parsed = url.getText(requestProperties:

['User-Agent': 'Firefox', 

'Accept': 'application/json'])



then: "I expect to get Luke"

parsed.contains "Luke Skywalker"

}

}
Neat for GET,
but not other
methods
supported
Raw text, no
JSON parsing
@glaforge
Groovy wslite
37
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.0')

import wslite.rest.*

import wslite.http.*



class StarWars3 extends Specification {

static endpoint = 'https://starwars.apispark.net/v1'



def "retrieve Luke"() {

given: "a connection to the API"

def client = new RESTClient(endpoint)



when: "I retrieve the people/1"

def result = client.get(path: '/people/1', headers:

['User-Agent': 'Firefox', 'Accept': 'application/json'])



then: "I expect to get Luke"

result.json.name == "Luke Skywalker"

}

}
@glaforge
Groovy wslite
37
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.0')

import wslite.rest.*

import wslite.http.*



class StarWars3 extends Specification {

static endpoint = 'https://starwars.apispark.net/v1'



def "retrieve Luke"() {

given: "a connection to the API"

def client = new RESTClient(endpoint)



when: "I retrieve the people/1"

def result = client.get(path: '/people/1', headers:

['User-Agent': 'Firefox', 'Accept': 'application/json'])



then: "I expect to get Luke"

result.json.name == "Luke Skywalker"

}

}
Transparent
JSON parsing
@glaforge
Groovy wslite
38


















def client = new RESTClient(endpoint)





def result = client.get(path: '/people/1', headers:

['User-Agent': 'Firefox', 'Accept': 'application/json'])





result.json.name == "Luke Skywalker"



@glaforge
Groovy HTTPBuilder
39
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.1')

import groovyx.net.http.RESTClient

import static groovyx.net.http.ContentType.JSON



class StarWars4 extends Specification {

static endpoint = 'https://starwars.apispark.net/v1/'



def "retrieve Luke"() {

given: "a connection to the API"

def client = new RESTClient(endpoint)



when: "I retrieve the people/1"

def result = client.get(path: ‘people/1', contentType: JSON,

headers: ['User-Agent': 'Firefox'])



then: "I expect to get Luke"

result.data.name == "Luke Skywalker"

}

}
@glaforge
Groovy HTTPBuilder
40


















def client = new RESTClient(endpoint)





def result = client.get(path: ‘people/1', contentType: JSON,

headers: ['User-Agent': 'Firefox'])





result.data.name == "Luke Skywalker"



@glaforge
Restlet Framework client
41
@GrabResolver('http://maven.restlet.com')

@Grab('org.restlet.jse:org.restlet:2.3.2')

import org.restlet.resource.*

import static org.restlet.data.MediaType.*



class StarWars extends Specification {

static endpoint = 'https://starwars.apispark.net/v1'



def "retrieve Luke"() {

given: "I create a people resource"

def resource = new ClientResource("${endpoint}/people/1")



when: "I retrieve the resource"

def representation = resource.get(APPLICATION_JSON)



then: "I expect that resource to be Luke!"

representation.text.contains "Luke Skywalker"

}

}
@glaforge
Restlet Framework client
41
@GrabResolver('http://maven.restlet.com')

@Grab('org.restlet.jse:org.restlet:2.3.2')

import org.restlet.resource.*

import static org.restlet.data.MediaType.*



class StarWars extends Specification {

static endpoint = 'https://starwars.apispark.net/v1'



def "retrieve Luke"() {

given: "I create a people resource"

def resource = new ClientResource("${endpoint}/people/1")



when: "I retrieve the resource"

def representation = resource.get(APPLICATION_JSON)



then: "I expect that resource to be Luke!"

representation.text.contains "Luke Skywalker"

}

}
Raw text, no
JSON parsing
@glaforge
Restlet Framework client
42




















def resource = new ClientResource("${endpoint}/people/1")





def representation = resource.get(APPLICATION_JSON)





representation.text.contains "Luke Skywalker"



@glaforge
RetroFit
43
@Grab('com.squareup.retrofit:retrofit:1.9.0')

import retrofit.*

import retrofit.http.*



interface StarWarsService {

@Headers(["Accept: application/json",

"User-Agent: Firefox"])

@Get('/people/{id}')

People retrieve(@Path('id') String id)

}



class People { String name }



def restAdapter = new RestAdapter.Builder()

.setEndpoint('https://starwars.apispark.net/v1/')
.build()



def service = restAdapter.create(StarWarsService)

assert service.retrieve('1').name == 'Luke Skywalker'
Miscellaneous
Miscellaneous
@glaforge
DHC by Restlet
45
@glaforge
DHC by Restlet
45
http://bit.ly/dhctuto
@glaforge
httpie
46
@glaforge
REST-assured
47
@Grab('com.jayway.restassured:rest-assured:2.4.1')

import static com.jayway.restassured.RestAssured.*

import static org.hamcrest.Matchers.*



when().

get('https://starwars.apispark.net/v1/people/1').

then().

statusCode(200).

body('name', equalTo('Luke Skywalker')).

body('gender', equalTo('male'))
@glaforge
REST-assured — a Spock approach
48
@Grab('org.spockframework:spock-core:1.0-groovy-2.4')

import spock.lang.*



@Grab('com.jayway.restassured:rest-assured:2.4.1')

import static com.jayway.restassured.RestAssured.*

import static org.hamcrest.Matchers.*



class starwars_rest_assured_spock extends Specification {

def "rest assured and spock"() {

expect:

get('https://starwars.apispark.net/v1/people/1').then().with {

statusCode 200

body 'name', equalTo('Luke Skywalker')

}

}

}
@glaforge
Runscope
49
@glaforge
Mockbin
50
@glaforge
Httpbin
51
@glaforge
Requestb.in
52
Arg! The Groovy REST
force is too strong!
Thanks for your attention!
Questions & Answers
@glaforge 56
Help us move Groovy forward!
Thanks!
Take a Groovy REST!
@glaforge

Más contenido relacionado

La actualidad más candente

Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Henry S
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeCale Hoopes
 
05 integrate redis
05 integrate redis05 integrate redis
05 integrate redisErhwen Kuo
 
GlueCon 2015 - Publish your SQL data as web APIs
GlueCon 2015 - Publish your SQL data as web APIsGlueCon 2015 - Publish your SQL data as web APIs
GlueCon 2015 - Publish your SQL data as web APIsRestlet
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQLBrainhub
 
How web works and browser works ? (behind the scenes)
How web works and browser works ? (behind the scenes)How web works and browser works ? (behind the scenes)
How web works and browser works ? (behind the scenes)Vibhor Grover
 
Mongodb at-gilt-groupe-seattle-2012-09-14-final
Mongodb at-gilt-groupe-seattle-2012-09-14-finalMongodb at-gilt-groupe-seattle-2012-09-14-final
Mongodb at-gilt-groupe-seattle-2012-09-14-finalMongoDB
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsIdo Flatow
 
Test in Rest. API testing with the help of Rest Assured.
Test in Rest. API testing with the help of  Rest Assured.Test in Rest. API testing with the help of  Rest Assured.
Test in Rest. API testing with the help of Rest Assured.Artem Korchevyi
 
Introduction to Ruby Native Extensions and Foreign Function Interface
Introduction to Ruby Native Extensions and Foreign Function InterfaceIntroduction to Ruby Native Extensions and Foreign Function Interface
Introduction to Ruby Native Extensions and Foreign Function InterfaceOleksii Sukhovii
 
Alfresco WebScript Connector for Apache ManifoldCF
Alfresco WebScript Connector for Apache ManifoldCFAlfresco WebScript Connector for Apache ManifoldCF
Alfresco WebScript Connector for Apache ManifoldCFPiergiorgio Lucidi
 
Lecture #6. automation testing (andrey oleynik)
Lecture #6. automation testing (andrey oleynik)Lecture #6. automation testing (andrey oleynik)
Lecture #6. automation testing (andrey oleynik)Andrey Oleynik
 
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)Rob Crowley
 
Policy-based Resource Placement Across Hybrid Cloud
Policy-based Resource Placement Across Hybrid CloudPolicy-based Resource Placement Across Hybrid Cloud
Policy-based Resource Placement Across Hybrid CloudTorin Sandall
 
The ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersThe ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersKevin Hazzard
 
Building Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJsBuilding Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJsSrdjan Strbanovic
 

La actualidad más candente (20)

Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's Rye
 
05 integrate redis
05 integrate redis05 integrate redis
05 integrate redis
 
Rest APIs Training
Rest APIs TrainingRest APIs Training
Rest APIs Training
 
GlueCon 2015 - Publish your SQL data as web APIs
GlueCon 2015 - Publish your SQL data as web APIsGlueCon 2015 - Publish your SQL data as web APIs
GlueCon 2015 - Publish your SQL data as web APIs
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
How web works and browser works ? (behind the scenes)
How web works and browser works ? (behind the scenes)How web works and browser works ? (behind the scenes)
How web works and browser works ? (behind the scenes)
 
Mongodb at-gilt-groupe-seattle-2012-09-14-final
Mongodb at-gilt-groupe-seattle-2012-09-14-finalMongodb at-gilt-groupe-seattle-2012-09-14-final
Mongodb at-gilt-groupe-seattle-2012-09-14-final
 
Excellent rest using asp.net web api
Excellent rest using asp.net web apiExcellent rest using asp.net web api
Excellent rest using asp.net web api
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP Fundamentals
 
Test in Rest. API testing with the help of Rest Assured.
Test in Rest. API testing with the help of  Rest Assured.Test in Rest. API testing with the help of  Rest Assured.
Test in Rest. API testing with the help of Rest Assured.
 
SGCE 2015 REST APIs
SGCE 2015 REST APIsSGCE 2015 REST APIs
SGCE 2015 REST APIs
 
Introduction to Ruby Native Extensions and Foreign Function Interface
Introduction to Ruby Native Extensions and Foreign Function InterfaceIntroduction to Ruby Native Extensions and Foreign Function Interface
Introduction to Ruby Native Extensions and Foreign Function Interface
 
Alfresco WebScript Connector for Apache ManifoldCF
Alfresco WebScript Connector for Apache ManifoldCFAlfresco WebScript Connector for Apache ManifoldCF
Alfresco WebScript Connector for Apache ManifoldCF
 
Lecture #6. automation testing (andrey oleynik)
Lecture #6. automation testing (andrey oleynik)Lecture #6. automation testing (andrey oleynik)
Lecture #6. automation testing (andrey oleynik)
 
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
 
Policy-based Resource Placement Across Hybrid Cloud
Policy-based Resource Placement Across Hybrid CloudPolicy-based Resource Placement Across Hybrid Cloud
Policy-based Resource Placement Across Hybrid Cloud
 
The ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersThe ASP.NET Web API for Beginners
The ASP.NET Web API for Beginners
 
Building Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJsBuilding Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJs
 

Destacado

Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process ManagementThiago Pereira
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaDiego Santos
 
Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Sumy PHP User Grpoup
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyArturo Herrero
 
Apresentação Queimadas
Apresentação QueimadasApresentação Queimadas
Apresentação QueimadasRádio-uca Fhm
 
How Groovy Helps
How Groovy HelpsHow Groovy Helps
How Groovy HelpsKen Kousen
 
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...Michel Azevedo
 

Destacado (9)

Workshop - Business Process Management
Workshop - Business Process ManagementWorkshop - Business Process Management
Workshop - Business Process Management
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a Bonita
 
Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2Service approach for development Rest API in Symfony2
Service approach for development Rest API in Symfony2
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Apresentação Queimadas
Apresentação QueimadasApresentação Queimadas
Apresentação Queimadas
 
How Groovy Helps
How Groovy HelpsHow Groovy Helps
How Groovy Helps
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
Platform as a Service (PaaS)
Platform as a Service (PaaS)Platform as a Service (PaaS)
Platform as a Service (PaaS)
 
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...
SOA na Prática – Criando uma Aplicação BPMN com Bonita Open Solution, Mule ES...
 

Similar a Take a Groovy REST

FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱うIgaHironobu
 
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesomeEuroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesomeMetosin Oy
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...chbornet
 
Combining Heritrix and PhantomJS for Better Crawling of Pages with Javascript
Combining Heritrix and PhantomJS for Better Crawling of Pages with JavascriptCombining Heritrix and PhantomJS for Better Crawling of Pages with Javascript
Combining Heritrix and PhantomJS for Better Crawling of Pages with JavascriptMichael Nelson
 
Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009sullis
 
Access Control for HTTP Operations on Linked Data
Access Control for HTTP Operations on Linked DataAccess Control for HTTP Operations on Linked Data
Access Control for HTTP Operations on Linked DataLuca Costabello
 
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...apidays
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web FrameworkDaniel Woods
 
Construindo aplicações com HTML5, WebSockets, e Java EE 7
Construindo aplicações com HTML5, WebSockets, e Java EE 7Construindo aplicações com HTML5, WebSockets, e Java EE 7
Construindo aplicações com HTML5, WebSockets, e Java EE 7Bruno Borges
 
The never-ending REST API design debate -- Devoxx France 2016
The never-ending REST API design debate -- Devoxx France 2016The never-ending REST API design debate -- Devoxx France 2016
The never-ending REST API design debate -- Devoxx France 2016Restlet
 
Web Frameworks of the Future
Web Frameworks of the FutureWeb Frameworks of the Future
Web Frameworks of the Futureelliando dias
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesPeter
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...François-Guillaume Ribreau
 
Arabidopsis Information Portal, Developer Workshop 2014, Introduction
Arabidopsis Information Portal, Developer Workshop 2014, IntroductionArabidopsis Information Portal, Developer Workshop 2014, Introduction
Arabidopsis Information Portal, Developer Workshop 2014, IntroductionJasonRafeMiller
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deckAlexey Bokov
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and GoAlvaro Viebrantz
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsRasheed Waraich
 
Taking Control of your Data with GraphQL
Taking Control of your Data with GraphQLTaking Control of your Data with GraphQL
Taking Control of your Data with GraphQLVinci Rufus
 

Similar a Take a Groovy REST (20)

FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
 
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesomeEuroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
Euroclojure2014: Schema & Swagger - making your Clojure web APIs more awesome
 
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
 
Combining Heritrix and PhantomJS for Better Crawling of Pages with Javascript
Combining Heritrix and PhantomJS for Better Crawling of Pages with JavascriptCombining Heritrix and PhantomJS for Better Crawling of Pages with Javascript
Combining Heritrix and PhantomJS for Better Crawling of Pages with Javascript
 
Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009
 
Access Control for HTTP Operations on Linked Data
Access Control for HTTP Operations on Linked DataAccess Control for HTTP Operations on Linked Data
Access Control for HTTP Operations on Linked Data
 
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...
apidays LIVE Australia - Have your cake and eat it too: GraphQL? REST? Why no...
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web Framework
 
Construindo aplicações com HTML5, WebSockets, e Java EE 7
Construindo aplicações com HTML5, WebSockets, e Java EE 7Construindo aplicações com HTML5, WebSockets, e Java EE 7
Construindo aplicações com HTML5, WebSockets, e Java EE 7
 
The never-ending REST API design debate -- Devoxx France 2016
The never-ending REST API design debate -- Devoxx France 2016The never-ending REST API design debate -- Devoxx France 2016
The never-ending REST API design debate -- Devoxx France 2016
 
Web Frameworks of the Future
Web Frameworks of the FutureWeb Frameworks of the Future
Web Frameworks of the Future
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build Sites
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
 
About Clack
About ClackAbout Clack
About Clack
 
Arabidopsis Information Portal, Developer Workshop 2014, Introduction
Arabidopsis Information Portal, Developer Workshop 2014, IntroductionArabidopsis Information Portal, Developer Workshop 2014, Introduction
Arabidopsis Information Portal, Developer Workshop 2014, Introduction
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deck
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and Go
 
Architecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web AppsArchitecture & Workflow of Modern Web Apps
Architecture & Workflow of Modern Web Apps
 
Into The Box 2018 Ortus Keynote
Into The Box 2018 Ortus KeynoteInto The Box 2018 Ortus Keynote
Into The Box 2018 Ortus Keynote
 
Taking Control of your Data with GraphQL
Taking Control of your Data with GraphQLTaking Control of your Data with GraphQL
Taking Control of your Data with GraphQL
 

Más de Restlet

APIDays - API Design Workshop
APIDays - API Design WorkshopAPIDays - API Design Workshop
APIDays - API Design WorkshopRestlet
 
APIdays 2016 - The State of Web API Languages
APIdays 2016  - The State of Web API LanguagesAPIdays 2016  - The State of Web API Languages
APIdays 2016 - The State of Web API LanguagesRestlet
 
APIStrat Open API Workshop
APIStrat Open API WorkshopAPIStrat Open API Workshop
APIStrat Open API WorkshopRestlet
 
DevOps DDay - Streamline DevOps Workflows With APIs
DevOps DDay - Streamline DevOps Workflows With APIsDevOps DDay - Streamline DevOps Workflows With APIs
DevOps DDay - Streamline DevOps Workflows With APIsRestlet
 
Restlet Framework NG
Restlet Framework NGRestlet Framework NG
Restlet Framework NGRestlet
 
API World 2016 - A five-sided prism polarizing Web API development
API World 2016 - A five-sided prism polarizing Web API developmentAPI World 2016 - A five-sided prism polarizing Web API development
API World 2016 - A five-sided prism polarizing Web API developmentRestlet
 
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...Restlet
 
Public and private APIs: differences and challenges
Public and private APIs: differences and challengesPublic and private APIs: differences and challenges
Public and private APIs: differences and challengesRestlet
 
APIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesAPIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesRestlet
 
The never-ending REST API design debate
The never-ending REST API design debateThe never-ending REST API design debate
The never-ending REST API design debateRestlet
 
GlueCon 2015 - How REST APIs can glue all types of devices together
GlueCon 2015 - How REST APIs can glue all types of devices togetherGlueCon 2015 - How REST APIs can glue all types of devices together
GlueCon 2015 - How REST APIs can glue all types of devices togetherRestlet
 
Transformez vos Google Spreadsheets en API web - DevFest 2014
Transformez vos Google Spreadsheets en API web - DevFest 2014Transformez vos Google Spreadsheets en API web - DevFest 2014
Transformez vos Google Spreadsheets en API web - DevFest 2014Restlet
 
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...Restlet
 
APIdays Paris 2014 - The State of Web API Languages
APIdays Paris 2014 - The State of Web API LanguagesAPIdays Paris 2014 - The State of Web API Languages
APIdays Paris 2014 - The State of Web API LanguagesRestlet
 
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIs
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIsDefrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIs
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIsRestlet
 
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...Restlet
 
APIdays Paris - How to Build Your Web API
APIdays Paris - How to Build Your Web APIAPIdays Paris - How to Build Your Web API
APIdays Paris - How to Build Your Web APIRestlet
 
Web APIs, the New Language Frontier
Web APIs, the New Language FrontierWeb APIs, the New Language Frontier
Web APIs, the New Language FrontierRestlet
 
Investir sur son API web (in French)
Investir sur son API web (in French)Investir sur son API web (in French)
Investir sur son API web (in French)Restlet
 
Deploy a web API in 15'
Deploy a web API in 15'Deploy a web API in 15'
Deploy a web API in 15'Restlet
 

Más de Restlet (20)

APIDays - API Design Workshop
APIDays - API Design WorkshopAPIDays - API Design Workshop
APIDays - API Design Workshop
 
APIdays 2016 - The State of Web API Languages
APIdays 2016  - The State of Web API LanguagesAPIdays 2016  - The State of Web API Languages
APIdays 2016 - The State of Web API Languages
 
APIStrat Open API Workshop
APIStrat Open API WorkshopAPIStrat Open API Workshop
APIStrat Open API Workshop
 
DevOps DDay - Streamline DevOps Workflows With APIs
DevOps DDay - Streamline DevOps Workflows With APIsDevOps DDay - Streamline DevOps Workflows With APIs
DevOps DDay - Streamline DevOps Workflows With APIs
 
Restlet Framework NG
Restlet Framework NGRestlet Framework NG
Restlet Framework NG
 
API World 2016 - A five-sided prism polarizing Web API development
API World 2016 - A five-sided prism polarizing Web API developmentAPI World 2016 - A five-sided prism polarizing Web API development
API World 2016 - A five-sided prism polarizing Web API development
 
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...
MuleSoft Connect 2016 - Getting started with RAML using Restlet’s visual desi...
 
Public and private APIs: differences and challenges
Public and private APIs: differences and challengesPublic and private APIs: differences and challenges
Public and private APIs: differences and challenges
 
APIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API LanguagesAPIdays 2015 - The State of Web API Languages
APIdays 2015 - The State of Web API Languages
 
The never-ending REST API design debate
The never-ending REST API design debateThe never-ending REST API design debate
The never-ending REST API design debate
 
GlueCon 2015 - How REST APIs can glue all types of devices together
GlueCon 2015 - How REST APIs can glue all types of devices togetherGlueCon 2015 - How REST APIs can glue all types of devices together
GlueCon 2015 - How REST APIs can glue all types of devices together
 
Transformez vos Google Spreadsheets en API web - DevFest 2014
Transformez vos Google Spreadsheets en API web - DevFest 2014Transformez vos Google Spreadsheets en API web - DevFest 2014
Transformez vos Google Spreadsheets en API web - DevFest 2014
 
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...
APIdays Paris 2014 - Workshop - Craft and Deploy Your API in a Few Clicks Wit...
 
APIdays Paris 2014 - The State of Web API Languages
APIdays Paris 2014 - The State of Web API LanguagesAPIdays Paris 2014 - The State of Web API Languages
APIdays Paris 2014 - The State of Web API Languages
 
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIs
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIsDefrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIs
Defrag 2014 - Blend Web IDEs, Open Source and PaaS to Create and Deploy APIs
 
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...
QCon SF 2014 - Create and Deploy APIs using Web IDEs, Open Source Frameworks ...
 
APIdays Paris - How to Build Your Web API
APIdays Paris - How to Build Your Web APIAPIdays Paris - How to Build Your Web API
APIdays Paris - How to Build Your Web API
 
Web APIs, the New Language Frontier
Web APIs, the New Language FrontierWeb APIs, the New Language Frontier
Web APIs, the New Language Frontier
 
Investir sur son API web (in French)
Investir sur son API web (in French)Investir sur son API web (in French)
Investir sur son API web (in French)
 
Deploy a web API in 15'
Deploy a web API in 15'Deploy a web API in 15'
Deploy a web API in 15'
 

Último

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Último (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

Take a Groovy REST