SlideShare a Scribd company logo
1 of 55
Download to read offline
RESTMOREWITHJSON:APIAND
FRACTAL
Use open standards to build better and more
maintainable APIs
1
$>WHOAMI
$>BOYAN
Developer at Shtrak
Community cheerleader
Wannabe speaker and writer
Partialy-guilty for phpVarna
2 . 1
WHERETOFINDME
@specter_bg
boyanyordanov
boyanyordanov
2 . 2
WHATISREST?
REpresentational State Transfer
3 . 1
WHATISREST?
pretty URLs ?
HTTP verbs for actions ?
None of those ?
3 . 2
ACHIEVINGETERNALGLORY
Richardson Maturity Model post by Martin Fowler
3 . 3
SOAREWE...?
... probably NOT. But does it really matter?
3 . 4
OPENSTANDARDS
What makes an open standard ?
Cooperation
Adherence to Principles
Due process, Broad concensus, Transparency,
Balance, Openness
Collective Empowerment
Availability
Voluntary Adoption
4 . 1
EXAMPLESWEUSEEVERYDAY
HTTP
CSS, HTML, ECMAScript
C, C++, Java ( ), C#
PHP RFC process and PHP-Fig PSRs (sort of)
JCP
4 . 2
OPENSTANDARDSANDAPIS
Auth and security
Oauth 1/2, OpenID Connect, JWT
Documentation / helper
openapi/swagger, api blueprint, RAML json-
schema
Representation / content types
HAL, Problem JSON, Hydra and json-ld, JSON-
API
5
BENEFITSOFUSINGSTANDARDSFOR
APIS
easier to design and build
easier to maintain
easier to consume
easier to test
6 . 1
6 . 2
7
OVERVIEW
well-de ned conventions for listing, creating,
updating and deleting resources
recommendations for details not covered in the
main spec
server and client libraries in most popular
languages
8
9
{
"links": { "self": "/meetups/1" },
"data": {
"type": "articles",
"id": "1",
"attributes": {
"title": "JSON API paints my bikeshed!"
},
"relationships": {
"author": {
"links": {"self": "...", "related": "..."},
"data": { "type": "people", "id": "9" }
}
}
}
}
10
THEMEDIATYPE
Client call
Server response
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Content-type: application/vnd.api+json
11 . 1
DECONSTRUCTINGTHECOMPOUND
DOCUMENT
TOPLEVELATTRIBUTES
data
errors
meta
links
jsonapi
included
11 . 2
TYPESOFOBJECTS
resource object
link object
resource identi er object
error object
12 . 1
THERESOURCEOBJECT
{
"type": "meetups",
"id": "1",
"attributes": {
"name": "PHP Varna",
"description": "The php UG of Varna",
"next-meetup": "2017-05-18T19:30:00.200Z"
}
}
12 . 2
LINKSOBJECT
"links": {
"self": "/meetups/1"
}
...
"links": {
"related": {
"href": "/meetups/1/attendees",
"meta": {
"count": 50
}
}
}
12 . 3
RESOURCEIDENTIFIEROBJECT
{
"id": "1",
"type": "meetups",
"meta": {
"attendee-count": 50
}
}
12 . 4
RELATIONSHIPSOBJECT
"relationships": {
"location": {
"links": {
"self": "meetups/1/relationships/venue",
"related": "meetups/1/venue"
},
"data": { "type": "venues", "id": "1" }
}
}
12 . 5
PUTTINGITALLTOGETHER
GET /meetups HTTP/1.1
Accept: application/vnd.api+json
{
"data": {
"type": "meetups",
"id": "1",
"attributes": {
"name": "PHP Varna",
"description": "The php UG of Varna",
"next-meetup": "2017-05-18T19:30:00.200Z"
},
"relationships": {
"venue": {
"data": { "type": "venues", "id": "1" }
}
}
}
}
13
RELATIONSHIPS
Change the meetup place
PATCH /meetups/1/relationships/venue HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": { "type": "venues", "id": "12" }
}
14 . 1
Remove the venue (untill we nd a new one?)
PATCH /meetups/1/relationships/venue HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": null
}
14 . 2
SIDELOADINGRELATIONSHIPS(GETMEETUPANDVENUE)
GET /meetups/1?include=venue HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"data": {
// resource object from previous slides
},
"included": [
{
"type": "venues",
"id": "1",
"attributes": {
"name": "VarnaLab",
"address": "ul. 'Pencho Slaveykov' 50"
}
}
]
14 . 3
ERROROBJECTS
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/vnd.api+json
{
"errors": [
{
"status": "422",
"source": { "pointer": "/data/attributes/name" },
"title": "Invalid Attribute",
"detail": "Meetup name must contain at least three characters."
}
]
}
15
QUERYPARAMS
ltering
sorting
GET /meetups?filter[venue]="VarnaLab" HTTP/1.1
Accept: application/vnd.api+json
GET /meetups?sort=name HTTP/1.1
Accept: application/vnd.api+json
GET /meetups?sort=-name HTTP/1.1
Accept: application/vnd.api+json
16 . 1
sparse eldsets
GET /meetups?fields[meetups]=name HTTP/1.1
Accept: application/vnd.api+json
{
"data": [
{
"id": "1",
"type": "meetups",
"attributes": {
"name": "PHP Varna"
}
},
{
"id": "2",
"type": "meetups",
"attributes": {
"name": "WordPress Varna"
}
}
16 . 2
PAGINATION
GET /meetups?page[number]=3&page[size]=1 HTTP/1.1
Accept: application/vnd.api+json
16 . 3
{
"meta": {
"total-pages": 12
},
"data": [
{
"type": "meetups",
"id": "2",
"attributes": {
"name": "WordPress Varna",
"description": "The place for WordPress entusiasts",
"next-meetup": "",
}
}
],
"links": {
"self": "/meetups?page[number]=2&page[size]=1",
"first": "/meetups?page[number]=1&page[size]=1",
"prev": "/meetups?page[number]=2&page[size]=1",
"next": "/meetups?page[number]=4&page[size]=1",
"last": "/meetups?page[number]=12&page[size]=1"
}
}
16 . 4
RESOURCEOPERATIONS
listing
show 404 examples
get individual resource
create
show validation errors examples
update
delete
17
CREATEAMEETUP
POST /meetups HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "meetups",
"attributes": {
"name": "JS Varna?",
"desription": "Does Varna need another meetup?"
},
"relationships": {//optional}
}
}
18
FRACTAL
Like a view layer for your
JSON/YAML/etc.
19
MAINCONCEPTS
Fractal Manager
Resource
Includes
Serializer
Transformer
Pagination
via paginator
via cursor
20
RESOURCES&TRANSFORMERS
Closure transformer
use LeagueFractalResourceItem;
$meetup = retrieveFromDB();
$meetupResource = new Item($meetup, function($m) {
return [
'id' => $meetup->id,
'name' => $meetup->name,
'description' => $meetup->description,
'next-meetup' => $meetup->events->getNext()->date
];
});
21 . 1
Class transformer
use LeagueFractalTransformerAbstract;
use LeagueFractalResourceCollection;
class MeetupTransformer extends TransformerAbstract
{
public function transform(Meetup $meetup)
{
return [
'id' => $meetup->id,
'name' => $meetup->name,
'description' => $meetup->description,
'next-meetup' => $meetup->events->getNext()->date
];
}
}
$data = new Collection($meetups, new MeetupTransformer);
21 . 2
De ning includes
use LeagueFractalTransformerAbstract;
use LeagueFractalResourceCollection;
class MeetupTransformer extends TransformerAbstract
{
protected $availableIncludes = ['venues'];
public function transform($meetup) { ... }
public function includeVenue($meetup)
{
$venue = $meetup->venue;
$transformer = new VenueTransformer;
return $this->item($venue, $transformer, 'venues');
}
}
$data = new Collection($meetups, new MeetupTransformer);
21 . 3
Creating a resource
use LeagueFractalSerializerJsonApiSerializer;
$manager = new LeagueFractalManager();
$baseUrl = 'http://meetup.dev';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// ORM call
$meetup = Meetup::find(1);
// Make a resource out of the data and
$resource = new Item($meetup, new MeetupTransformer, 'meetups');
// Run all transformers
$manager->createData($resource)->toArray();
21 . 4
Result
[
"data" => [
"type" => "meetups",
"id" => "1",
"attributes" => [
"name" => "PHP Varna",
"description" => "The php UG in Varna",
"next-meetup" => "2017-05-18T19:30:00.200Z"
]
],
"links" => [
"self" => "http://meetup.dev/meetups/1"
]
]
21 . 5
Using includes
use LeagueFractalSerializerJsonApiSerializer;
$manager = new LeagueFractalManager();
$baseUrl = 'http://meetup.dev';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// ORM call
$meetup = Meetup::find(1);
if (isset($_GET['include'])) {
$fractal->parseIncludes($_GET['include']);
}
21 . 6
WHATISMISSINGFROMTHESPEC?
ltering
sorting
sparse eldsets
pagination - present and usable but not spec
compliant
22 . 1
PAGINATION
use LeagueFractalResourceCollection;
use LeagueFractalPaginationIlluminatePaginatorAdapter;
use AcmeModelBook;
use AcmeTransformerBookTransformer;
$paginator = Meetup::paginate();
$meetups = $paginator->getCollection();
$resource = new Collection($meetups, new MeetupTransformer);
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
22 . 2
SUPPORTEDADAPTERS
Laravel
Doctrine
Zend Framework
Phalcon
Pagerfanta
your own PaginatorInterface implementation
22 . 3
WHATISNOTINCLUDEDON
PURPOSE?
content negotiation
response code handling
error objects
22 . 4
HANDLINGERROROBJECTS
23
Use a base class
class JsonApiError extends Exception {
protected $status;
protected $title;
protected $detail;
protected $source;
protected $meta;
public function toArray() {...}
}
24 . 1
Extend it for speci c errors
class NotFoundError extends JsonApiError {
protected $status = 404;
protected $title = 'Resource not found';
}
24 . 2
EASIERFRACTAL
composer install spatie/fractalistic
A developer friendly wrapper around
Fractal
25 . 1
Fractal::create()
->collection($meetups)
->transformWith(new MeetupTransformer())
->includeVenue()
->toArray();
25 . 2
ALTERNATIVES
neomerx/json-api
resource transformation
query parameters handling
errors
26
RESOURCES
http://jsonapi.org/
http://fractal.thephpleague.com/
https://www.ics.uci.edu/~ elding/pubs/dissertation
Steve Klabnik's talk: past, present and future of json
https://youtu.be/Foi54om6oGQ
discussion: who's using json-api - https://github.com
api/issues/825
27
THANKYOU
28
QUESTIONS?
29

More Related Content

What's hot

Java web programming
Java web programmingJava web programming
Java web programmingChing Yi Chan
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallPeter R. Egli
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design PatternsBobby Bouwmann
 
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...Ville Mattila
 
Leveraging APIs without Programming in FME Server Provisioning
Leveraging APIs without Programming in FME Server ProvisioningLeveraging APIs without Programming in FME Server Provisioning
Leveraging APIs without Programming in FME Server ProvisioningSafe Software
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and ChefPiXeL16
 
And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...Codemotion
 

What's hot (9)

Java web programming
Java web programmingJava web programming
Java web programming
 
JSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure CallJSON-RPC - JSON Remote Procedure Call
JSON-RPC - JSON Remote Procedure Call
 
Laravel Design Patterns
Laravel Design PatternsLaravel Design Patterns
Laravel Design Patterns
 
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...
Running a Scalable And Reliable Symfony2 Application in Cloud (Symfony Sweden...
 
Leveraging APIs without Programming in FME Server Provisioning
Leveraging APIs without Programming in FME Server ProvisioningLeveraging APIs without Programming in FME Server Provisioning
Leveraging APIs without Programming in FME Server Provisioning
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and Chef
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Advanced Json
Advanced JsonAdvanced Json
Advanced Json
 
And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...
 

Similar to REST more with json-api and fractal

Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationRalf Eggert
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...King Foo
 
Multi tenant laravel
Multi tenant laravelMulti tenant laravel
Multi tenant laravelPeter Mein
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
Server Side Swift with Swag
Server Side Swift with SwagServer Side Swift with Swag
Server Side Swift with SwagJens Ravens
 
Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Jens Ravens
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Elena Kolevska
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Michel Schudel
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaGuido Schmutz
 
Adriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI TalkAdriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI Talkaldur999
 
Server side data sync for mobile apps with silex
Server side data sync for mobile apps with silexServer side data sync for mobile apps with silex
Server side data sync for mobile apps with silexMichele Orselli
 
SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...Vladyslav Riabchenko
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web ArtisansRaf Kewl
 
Native REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gNative REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gMarcelo Ochoa
 

Similar to REST more with json-api and fractal (20)

Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next Generation
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
 
Multi tenant laravel
Multi tenant laravelMulti tenant laravel
Multi tenant laravel
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Server Side Swift with Swag
Server Side Swift with SwagServer Side Swift with Swag
Server Side Swift with Swag
 
Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017Server Side Swift - AppBuilders 2017
Server Side Swift - AppBuilders 2017
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Services Stanford 2012
Services Stanford 2012Services Stanford 2012
Services Stanford 2012
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
 
Adriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI TalkAdriano Di Luzio - Davvy - PyconSEI Talk
Adriano Di Luzio - Davvy - PyconSEI Talk
 
Server side data sync for mobile apps with silex
Server side data sync for mobile apps with silexServer side data sync for mobile apps with silex
Server side data sync for mobile apps with silex
 
SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Laravel for Web Artisans
Laravel for Web ArtisansLaravel for Web Artisans
Laravel for Web Artisans
 
Native REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11gNative REST Web Services with Oracle 11g
Native REST Web Services with Oracle 11g
 

Recently uploaded

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
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
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
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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
 

REST more with json-api and fractal