SlideShare a Scribd company logo
Dilemmas and decisions
What we’ve learned designing the new Sylius API
Introduction
01
Photo by Mikhail Vasilyev on Unsplash
sylius.com
3
Certi
fi
cation 🎄
SYLIUSROCKS
-30%
Paid OS Support
Modular SyliusPlus
sylius.com
8
sylius.com
9
Started in 2020
1.12 with AP 2.7 (since 31st of Oct)
1.13 stabilized with AP 3.0 🎉
~100% of shop & ~70% of all coverage
Photo by Shane Aldendorff on Unsplash
Decisions & consequences
02
Strategic design
sylius.com
12
ADRs
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
[short title of solved problem and solution]
Status: [proposed | rejected | accepted | deprecated | … | superseded by ADR-0005]
Date: [YYYY-MM-DD when the decision was last updated]
Context and Problem Statement
[Describe the context and problem statement]
Decision Drivers
[driver 1, e.g., a force, facing concern, …]
…
Considered Options
[option 1]
[example | description | pointer to more information | …]
Good, because [argument a]
Bad, because [argument b]
…
Decision Outcome
Chosen option: "[option 1]", because [justi
fi
cation].
References
[Link type] [Link to ADR]
…
sylius.com
21
Conclusion?
sylius.com
22
GraphQL vs REST
2020 -> GraphQL 🚀
Is it still?
Is it not?
sylius.com
28
✔ Solves over fetching and under fetching
By design
✔ Typed, nice documentation
? Sends everything with POST
It is possible to do it with GET
✔ Gracefully deprecation of queries
Which was not possible with default REST
GraphQL
sylius.com
29
✔ May solve over fetching and under fetching
With spare
fi
elds sets and/or Vulcain
✔ Typed, nice documentation
With OpenAPI
✔ Takes advantage of 20 years of web cache development
Fake date institute ™
✔ Gracefully deprecation of queries
With OpenAPI
REST
sylius.com
30
Conclusion?
Resources design
sylius.com
32
State transitions
Case
Let’s cancel an order!
sylius.com
34
Considered option #1
PATCH /api/orders/42/
{
"state": "cancelled"
}
sylius.com
35
Considered option #2
PATCH /api/orders/42/cancel
{}
RESTful Archetypes
Document
/api/admin/orders/1
Store
Client controlled /api/admin/orders/123
Collections
Server controlled /api/admin/orders
Controller
/api/admin/orders/1/cancel
Based on: REST API Design Rulebook by Mark Masse
sylius.com
38
Isn’t there a better way?
sylius.com
39
Solution?
POST /api/orders-cancellation-requests/
{}
sylius.com
40
Conclusion?
sylius.com
41
Calculated data
Case
Cost of the shipment
Version #1 - Adding
fi
elds on entity
class ShippingMethod
{
/** rest of methods */
public ?int $cost; // never used in app
// serialized only when possible to count
}
Version #2 - Read model
class CartShippingMethod
{
public function __construct(
public readonly string $code,
public readonly ShippingMethodInterface $shippingMethod,
public readonly int $cost
) {
}
}
Version #3 - Dynamic
fi
eld
public function normalize($object, $format = null, array $context = [])
{
Assert::keyNotExists($context, self::ALREADY_CALLED);
$context[self::ALREADY_CALLED] = true;
$data = $this->normalizer->normalize($object, $format, $context);
$calculator = $this->shippingCalculators->get($object->getCalculator());
$data['price'] = $calculator->calculate(
$shipment,
$object->getConfiguration()
);
return $data;
}
public function normalize($object, $format = null, array $context = [])
{
Assert::keyNotExists($context, self::ALREADY_CALLED);
$context[self::ALREADY_CALLED] = true;
$data = $this->normalizer->normalize($object, $format, $context);
$calculator = $this->shippingCalculators->get($object->getCalculator());
$data['price'] = $calculator->calculate(
$shipment,
$object->getConfiguration()
);
return $data;
}
public function normalize($object, $format = null, array $context = [])
{
Assert::keyNotExists($context, self::ALREADY_CALLED);
$context[self::ALREADY_CALLED] = true;
$data = $this->normalizer->normalize($object, $format, $context);
$calculator = $this->shippingCalculators->get($object->getCalculator());
$data['price'] = $calculator->calculate(
$shipment,
$object->getConfiguration()
);
return $data;
}
public function normalize($object, $format = null, array $context = [])
{
Assert::keyNotExists($context, self::ALREADY_CALLED);
$context[self::ALREADY_CALLED] = true;
$data = $this->normalizer->normalize($object, $format, $context);
$calculator = $this->shippingCalculators->get($object->getCalculator());
$data['price'] = $calculator->calculate(
$shipment,
$object->getConfiguration()
);
return $data;
}
Version #3 - Dynamic
fi
eld
sylius.com
47
Conclusion?
High level API design
sylius.com
49
Uni
fi
cation of API
/api/products/
Admin & Shop served together
sylius.com
51
✘ Available
fi
elds
Complicated serialisation groups depending on logged in user
✘ Hard to de
fi
ne identi
fi
ers
We have resigned from them later
✘ Requirement to de
fi
ne granular access control
To now allow to access sensitive date for non-admins
Findings
sylius.com
52
🛒 Shop has 72 endpoints
64% of read endpoints
🖊 Only 20% of resources have writable capabilities in shop
40% of them are never exposed in shop
⚙ Admin has 128 endpoints
52% of read endpoints
Data
Option #1 - Admin & Shop pre
fi
xed
/api/products/?admin
sylius.com
54
✔ Available
fi
elds
Depending on logged in user
✘ Seems wrong from the REST perspective
If we add pre
fi
x to the URL
✘ Requirement to de
fi
ne granular access control
To now allow to access sensitive date for non-admins
Findings
Option #2 - Admin & Shop header split
/api/products/
Accept:
application/vnd.sylius-admin.api+json
sylius.com
56
✔ Available
fi
elds
Depending on logged in user
✔ REST compilant
✘ Requirement to de
fi
ne granular access control
May be mitigated with Voters
Findings
✘ Not easily supported
By API Platform and Open API spec
Option #3 - Admin & Shop pre
fi
xed
/api/shop/products/
/api/admin/products/
sylius.com
58
✔ Available
fi
elds
Depending on logged in user
✔/✘ REST compilant
Disputable
✔ Straightforward access control
Just with security con
fi
g
Findings
✔ Easily supported
By API Platform and Open API spec
sylius.com
59
Conclusion?
sylius.com
60
API versioning
/api/v1
Old Admin API
#1 version
/new-api/
sylius.com
63
URL based versioning
/api/v2
Custom header
X-Sylius-API-Version: 1
Accept header with an additional vendor information
Accept: application/vnd.sylius.v1+json
#2 version
sylius.com
66
Conclusion?
sylius.com
67
But!
sylius.com
68
🔮 Versioning endpoints
With sunset header
🔮 Vendor added to accept header
application/vnd.sylius.v1+json
🔮 Deprecating endpoints,
fi
elds etc
In documentation of Open API
Future
API
fl
ow design
Case #1
Add to cart
Simple product
{
"product": “/api/products/42“,
"quantity": 1
}
Con
fi
gurable product #1
{
"product": “/api/products/42“,
"productVariant": “/api/product-variants/42“,
"quantity": 1
}
{
"product": “/api/products/42“,
“options": {
"SIZE": “SIZE_L",
"COLOR": “COLOR_BLUE"
},
"quantity": 1
}
Con
fi
gurable product #2
{
"product": “/api/products/864“,
"productVariant": “/api/product-variants/864“,
"quantity": 1
}
Let’s improve!
{
"product": “/api/products/42“,
"quantity": 1
}
Configurable
product
Simple
product
Let’s improve!
{
"product": “/api/products/864“,
"productVariant": “/api/product-variants/864“,
"quantity": 1
}
{
"product": “/api/products/42“,
"productVariant": “/api/product-variants/42“,
"quantity": 1
}
Configurable
product
Simple
product
Let’s improve!
{
"product": “/api/products/42“,
"productVariant": “/api/product-variants/42“,
"quantity": 1
} Configurable
product
Simple
product
Let’s improve!
{
"productVariant": “/api/product-variants/42“,
"quantity": 1
}
Configurable
product
Simple
product
sylius.com
78
But what with options?
Price matrix in UI
or
Ask us
sylius.com
80
Conclusion?
Case #2
Order details
Apply coupon
Apply coupon
PATCH
 ​​
/ap
i​
/v
2​
/sho
p​
/order
s​
/TOKEN_VALU
E​
/apply-coupon
{
"couponCode": “CHRISTMAS_SALE"
}
Cart claiming & addressing
Cart claiming & addressing
PATCH
 ​
/ap
i​
/v
2​
/sho
p​
/order
s​
/TOKEN_VALUE/address
{
"email": “test@example.com”,
"billingAddress": {
"firstName": "Jane",
"lastName": "Doe",
"...": "..."
}
}
sylius.com
86
✔ We are used to this separation
Mockups “force” such design
✔ Addressing requires state machine transition
While coupon appliance cart processing
✔ Di
ff
erent data required on di
ff
erent pages
Reasoning?
What about order update?
Order update
PUT
 ​
/ap
i​
/v
2​
/sho
p​
/order
s​
/TOKEN_VALUE
{
"localeCode": “en_US”
}
But it is just order drafting!
sylius.com
90
✔ UI Mockups should not force any design decision
We can preload data from more then one endpoint
✔ Don’t use state machine where there is none
✔ Either store data earlier or use partial update
Changed attitude
PUT
 ​
/ap
i​
/v
2​
/sho
p​
/order
s​
/TOKEN_VALUE/
{
"email": “test@example.com”,
"billingAddress": {
"firstName": "Jane",
"lastName": "Doe",
"countryCode": "US",
"street": “Baker Street 221B”,
"city": “London",
"postcode": "Doe"
},
"couponCode": “CHRISTMAS_SALE"
}
Order update
sylius.com
92
Conclusion?
Photo by Mikhail Vasilyev on Unsplash
03
Takeaways
sylius.com
94
Use ADRs
And browse them from time to time
Custom logic? New API resource!
Let’s behave like a tax department!
REST will be with us for the long time
But GraphQL will be there as well
Do not map HTML based websites to your API
I know, it was obvious 😅
sylius.com
95
Thank you!
Photo by Anthony DELANOIX on Unsplash
@lukaszchrusciel
@lchrusciel@mastodon.social
@lchrusciel

More Related Content

What's hot

oracle order management
oracle order managementoracle order management
oracle order management
Souvik Chakraborty
 
презентація дисципліни трактори та автомобілі
презентація дисципліни трактори та автомобіліпрезентація дисципліни трактори та автомобілі
презентація дисципліни трактори та автомобілі
Николай Завирюха
 
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...Małopolski Instytut Kultury
 
Introduction to Basic Concepts in Web
Introduction to Basic Concepts in WebIntroduction to Basic Concepts in Web
Introduction to Basic Concepts in WebJussi Pohjolainen
 
Węglowodany 2
Węglowodany 2Węglowodany 2
Węglowodany 2
JOLANTA xx
 
Oracle Inventory - Working with Stock Locator
Oracle Inventory - Working with Stock LocatorOracle Inventory - Working with Stock Locator
Oracle Inventory - Working with Stock Locator
Rahul Guhathakurta
 
Oracle ebs r12eam part2
Oracle ebs r12eam part2Oracle ebs r12eam part2
Oracle ebs r12eam part2
jcvd12
 
Oracle R12 Inventory present.ppt
Oracle R12 Inventory present.pptOracle R12 Inventory present.ppt
Oracle R12 Inventory present.ppt
UmairIlyas21
 
Planning & publishing of website
Planning & publishing of website Planning & publishing of website
Planning & publishing of website
Archana Jha
 
Spring MVC to iOS and the REST
Spring MVC to iOS and the RESTSpring MVC to iOS and the REST
Spring MVC to iOS and the REST
Roy Clarkson
 
Oracle min-max-planning
Oracle min-max-planningOracle min-max-planning
Oracle min-max-planning
mgarg82
 
Web Application Technologies
Web Application TechnologiesWeb Application Technologies
Web Application Technologies
Sehan Lee
 
11
1111
8
88
9. Współpraca z otoczeniem rynkowym
9. Współpraca z otoczeniem rynkowym9. Współpraca z otoczeniem rynkowym
9. Współpraca z otoczeniem rynkowym
Lukas Pobocha
 
22. Użytkowanie i obsługiwanie maszyn i urządzeń
22. Użytkowanie i obsługiwanie maszyn i urządzeń22. Użytkowanie i obsługiwanie maszyn i urządzeń
22. Użytkowanie i obsługiwanie maszyn i urządzeń
Adam Osa
 
Web design content
Web design contentWeb design content
Web design content
MrCHenderson
 
Technik.hotelarstwa 341[04] z2.06_u
Technik.hotelarstwa 341[04] z2.06_uTechnik.hotelarstwa 341[04] z2.06_u
Technik.hotelarstwa 341[04] z2.06_u
Pusiu99
 
HTML: Chapter 01
HTML: Chapter 01HTML: Chapter 01
HTML: Chapter 01
Steve Guinan
 
Apache Web Server Architecture Chaitanya Kulkarni
Apache Web Server Architecture Chaitanya KulkarniApache Web Server Architecture Chaitanya Kulkarni
Apache Web Server Architecture Chaitanya Kulkarniwebhostingguy
 

What's hot (20)

oracle order management
oracle order managementoracle order management
oracle order management
 
презентація дисципліни трактори та автомобілі
презентація дисципліни трактори та автомобіліпрезентація дисципліни трактори та автомобілі
презентація дисципліни трактори та автомобілі
 
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...
Olaf Müller, "Goethe i zasady świata barw", Przestrzenie światła. Światło w p...
 
Introduction to Basic Concepts in Web
Introduction to Basic Concepts in WebIntroduction to Basic Concepts in Web
Introduction to Basic Concepts in Web
 
Węglowodany 2
Węglowodany 2Węglowodany 2
Węglowodany 2
 
Oracle Inventory - Working with Stock Locator
Oracle Inventory - Working with Stock LocatorOracle Inventory - Working with Stock Locator
Oracle Inventory - Working with Stock Locator
 
Oracle ebs r12eam part2
Oracle ebs r12eam part2Oracle ebs r12eam part2
Oracle ebs r12eam part2
 
Oracle R12 Inventory present.ppt
Oracle R12 Inventory present.pptOracle R12 Inventory present.ppt
Oracle R12 Inventory present.ppt
 
Planning & publishing of website
Planning & publishing of website Planning & publishing of website
Planning & publishing of website
 
Spring MVC to iOS and the REST
Spring MVC to iOS and the RESTSpring MVC to iOS and the REST
Spring MVC to iOS and the REST
 
Oracle min-max-planning
Oracle min-max-planningOracle min-max-planning
Oracle min-max-planning
 
Web Application Technologies
Web Application TechnologiesWeb Application Technologies
Web Application Technologies
 
11
1111
11
 
8
88
8
 
9. Współpraca z otoczeniem rynkowym
9. Współpraca z otoczeniem rynkowym9. Współpraca z otoczeniem rynkowym
9. Współpraca z otoczeniem rynkowym
 
22. Użytkowanie i obsługiwanie maszyn i urządzeń
22. Użytkowanie i obsługiwanie maszyn i urządzeń22. Użytkowanie i obsługiwanie maszyn i urządzeń
22. Użytkowanie i obsługiwanie maszyn i urządzeń
 
Web design content
Web design contentWeb design content
Web design content
 
Technik.hotelarstwa 341[04] z2.06_u
Technik.hotelarstwa 341[04] z2.06_uTechnik.hotelarstwa 341[04] z2.06_u
Technik.hotelarstwa 341[04] z2.06_u
 
HTML: Chapter 01
HTML: Chapter 01HTML: Chapter 01
HTML: Chapter 01
 
Apache Web Server Architecture Chaitanya Kulkarni
Apache Web Server Architecture Chaitanya KulkarniApache Web Server Architecture Chaitanya Kulkarni
Apache Web Server Architecture Chaitanya Kulkarni
 

More from Łukasz Chruściel

Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
Łukasz Chruściel
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
Łukasz Chruściel
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
Łukasz Chruściel
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdf
Łukasz Chruściel
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API Projects
Łukasz Chruściel
 
SymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdfSymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdf
Łukasz Chruściel
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Łukasz Chruściel
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf
Łukasz Chruściel
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf
Łukasz Chruściel
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
Łukasz Chruściel
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius API
Łukasz Chruściel
 
How to optimize background processes.pdf
How to optimize background processes.pdfHow to optimize background processes.pdf
How to optimize background processes.pdf
Łukasz Chruściel
 
How to optimize background processes - when Sylius meets Blackfire
How to optimize background processes - when Sylius meets BlackfireHow to optimize background processes - when Sylius meets Blackfire
How to optimize background processes - when Sylius meets Blackfire
Łukasz Chruściel
 
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsSymfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
Łukasz Chruściel
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
Łukasz Chruściel
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machine
Łukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
Łukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
Łukasz Chruściel
 

More from Łukasz Chruściel (20)

Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdf
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API Projects
 
SymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdfSymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdf
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius API
 
How to optimize background processes.pdf
How to optimize background processes.pdfHow to optimize background processes.pdf
How to optimize background processes.pdf
 
How to optimize background processes - when Sylius meets Blackfire
How to optimize background processes - when Sylius meets BlackfireHow to optimize background processes - when Sylius meets Blackfire
How to optimize background processes - when Sylius meets Blackfire
 
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsSymfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 

Recently uploaded

Technical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prismsTechnical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prisms
heavyhaig
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
thanhdowork
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
symbo111
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
itech2017
 
Unbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptxUnbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptx
ChristineTorrepenida1
 
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERSCW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
veerababupersonal22
 
Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
SUTEJAS
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
gdsczhcet
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Sreedhar Chowdam
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
gestioneergodomus
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
Kerry Sado
 
Steel & Timber Design according to British Standard
Steel & Timber Design according to British StandardSteel & Timber Design according to British Standard
Steel & Timber Design according to British Standard
AkolbilaEmmanuel1
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
Kamal Acharya
 
Fundamentals of Induction Motor Drives.pptx
Fundamentals of Induction Motor Drives.pptxFundamentals of Induction Motor Drives.pptx
Fundamentals of Induction Motor Drives.pptx
manasideore6
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Teleport Manpower Consultant
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
top1002
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
Kamal Acharya
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
bakpo1
 

Recently uploaded (20)

Technical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prismsTechnical Drawings introduction to drawing of prisms
Technical Drawings introduction to drawing of prisms
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
 
Unbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptxUnbalanced Three Phase Systems and circuits.pptx
Unbalanced Three Phase Systems and circuits.pptx
 
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERSCW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
CW RADAR, FMCW RADAR, FMCW ALTIMETER, AND THEIR PARAMETERS
 
Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
 
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
 
DfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributionsDfMAy 2024 - key insights and contributions
DfMAy 2024 - key insights and contributions
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
 
Steel & Timber Design according to British Standard
Steel & Timber Design according to British StandardSteel & Timber Design according to British Standard
Steel & Timber Design according to British Standard
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
Fundamentals of Induction Motor Drives.pptx
Fundamentals of Induction Motor Drives.pptxFundamentals of Induction Motor Drives.pptx
Fundamentals of Induction Motor Drives.pptx
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
 

SymfonyCon - Dilemmas and decisions..pdf