SlideShare une entreprise Scribd logo
1  sur  143
Télécharger pour lire hors ligne
Sylius and API Platform


The story of integration
Foreword
Application & Infrastructure


Hexagonal
3 topcis


Application, API Design, Testing
What did we want to
achieve?
Become modern,


API-
fi
rst e-commerce
Deliver a new quality in the
headless e-commerce
Be closer to Symfony
Always up-to-date
documentation
Application architecture
Photo by Marc-Olivier Jodoin on Unsplash
How to preserve Api Platform
usage easiness and Sylius
fl
exibility?
How to handle typical create,
update and read operations?
CRUD
Easy to setup
Easy to setup


Easy to use
Easy to setup


Easy to use


Easy to extend
Familiar for most developers
How?
#[ORMEntity
]

#[ApiResource
]

class Produc
t

{

/** */
}
Cons
Harder to bend to business
expectations
How to handle business
expectations?
Commands
Super
fl
exible


Gives possible to defer execution


Decouples layers
Infrastructure
Application
Infrastructure
Command
Application
Infrastructure
Handler
Command
Application
Infrastructure
Handler
Command
Messenger
Application
How?
class AddItemToCar
t

{

public ProductVariant $productVariant
;

public int $quantity;
}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{

$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart;
}

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{
$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{

$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{

$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{

$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart;
}

}
One command


One handler
Transaction & Validation
Middleware's
Super
fl
exible


Gives possible to defer execution


Decouples layers
Are they separated?
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{

$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart;
}

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{
$cart = $this->cartContext->getCart()
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
class AddItemToCar
t

{

public Order $order;
public ProductVariant $productVariant
;

public int $quantity
;

}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{
$cart = $command->order
;

$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
No session/request data


in handlers and below
Command should contain


all information required


to perform an action
Super
fl
exible


Gives possible to defer execution or
send it outside


Decouples layers
Can we defer it?
class AddItemToCar
t

{

public Order $order
;

public ProductVariant $productVariant
;

public int $quantity
;

}
class AddItemToCar
t

{

public string $orderToken;
public string $productVariantCode
;

public int $quantity;
}
final class AddItemToCartHandle
r

{

public function __invoke(AddItemToCart $command): Orde
r

{
$productVariant = $this->productVariantRepository->findOneBy
(

['code' => $addItemToCart->productVariantCode
]

)
;

$cart = $this->orderRepository->findCartByTokenValue
(

$addItemToCart->orderTokenValu
e

);
$cartItem = $this->cartItemFactory->createNew()
;

$cartItem->setVariant($command->productVariant)
;

$this->orderItemQuantityModifier->modify
(

$cartItem,
 

$command->quantit
y

)
;

$this->orderModifier->addToOrder($cart, $cartItem)
;

return $cart
;

}

}
Commands with raw data only
But where this data came from?
DataTransformer?
Every “new” keyword couples you to
given implementation
Not relevant for 87% of developers
Faked Data Institute ®
Command enrichment!
class AddItemToCart implements OrderTokenValueAwareInterfac
e

{

public ?string $orderTokenValue
;

public string $productVariantCode
;

public int $quantity
;

public function getOrderTokenValue(): ?strin
g

{

return $this->orderTokenValue
;

}

public function setOrderTokenValue(?string $orderTokenValue): voi
d

{

$this->orderTokenValue = $orderTokenValue
;

}

}
final class OrderTokenValueAwareInputCommandDataTransforme
r

implements CommandDataTransformerInterfac
e

{

public function transform($object, string $to, array $context = []
)

{

/** @var OrderInterface $cart *
/

$cart = $context['object_to_populate']
;

$object->setOrderTokenValue($cart->getTokenValue())
;

return $object
;

}

public function supportsTransformation($object): boo
l

{

return $object instanceof OrderTokenValueAwareInterface
;

}

}
DataTransformer


vs


DataEnrichment
Current user
Current user


Current locale
Current user


Current locale


Current channel(Sylius speci
fi
c)
Current user


Current locale


Current channel(Sylius speci
fi
c)


Current order
Current user


Current locale


Current channel(Sylius speci
fi
c)


Current order
No session/request data


in handlers and below
Enrichments provide better class
extendibility for framework
Interfaces as contracts
Cons
More complicated architecture


Steeper learning curve
API Design
Photo by Halacious on Unsplash
How to model our API?
IRI usage
{

"@context": "/api/v2/contexts/ProductVariant"
,

"@id": "/api/v2/shop/product-variants/MUG_BLUE"
,

"@type": "ProductVariant"
,

"id": @integer@
,

"onHand": 10
,

"code": "MUG_BLUE"
,

"currentStock": 5
,

"product": "/api/v2/shop/products/MUG"
,

"optionValues":
[

"/api/v2/shop/product-option-values/COLOR_BLUE
"

]
,

"translations": {...}
,

"price": 2000
,

"originalPrice": 2000
,

"inStock": tru
e

}
{

"@context": "/api/v2/contexts/ProductVariant"
,

"@id": "/api/v2/shop/product-variants/MUG_BLUE"
,

"@type": "ProductVariant"
,

"id": @integer@
,

"onHand": 10
,

"code": "MUG_BLUE"
,

"currentStock": 5
,

"product": "/api/v2/shop/products/MUG"
,

"optionValues":
[

"/api/v2/shop/product-option-values/COLOR_BLUE
"

]
,

"translations": {...}
,

"price": 2000
,

"originalPrice": 2000
,

"inStock": tru
e

}
{

"@context": "/api/v2/contexts/ProductVariant"
,

"@id": "/api/v2/shop/product-variants/MUG_BLUE"
,

"@type": "ProductVariant"
,

"id": @integer@
,

"onHand": 10
,

"code": "MUG_BLUE"
,

"currentStock": 5
,

"product": "/api/v2/shop/products/MUG"
,

"optionValues":
[

"/api/v2/shop/product-option-values/COLOR_BLUE
"

]
,

"translations": {...}
,

"price": 2000
,

"originalPrice": 2000
,

"inStock": tru
e

}
{

"@context": "/api/v2/contexts/ProductVariant"
,

"@id": "/api/v2/shop/product-variants/MUG_BLUE"
,

"@type": "ProductVariant"
,

"id": @integer@
,

"onHand": 10
,

"code": "MUG_BLUE"
,

"currentStock": 5
,

"product": "/api/v2/shop/products/MUG"
,

"optionValues":
[

"/api/v2/shop/product-option-values/COLOR_BLUE
"

]
,

"translations": {...}
,

"price": 2000
,

"originalPrice": 2000
,

"inStock": tru
e

}
class AddItemToCar
t

{

public string $orderToken;
public string $productVariantCode
;

public int $quantity;
}
How?
<class name="SyliusBundleApiBundleCommandCartAddItemToCart">
<attribute name="productVariantCode
"

serialized-name="productVariant
"

>

<group>shop:cart:add_item</group
>

</attribute
>

<attribute name="quantity"
>

<group>shop:cart:add_item</group
>

</attribute
>

</class>
class AddItemToCart implements IriToIdenti
fi
erConversionAwareInterfac
e

{

public string $orderToken
;

public string $productVariantCode
;

public int $quantity
;

}
Database =/= resource
Reset password
<resource
 

class=“SyliusBundleApiBundleCommandResetPassword
"

shortName="ResetPasswordRequest"
>

<collectionOperations
>

<collectionOperation name="shop_create_reset_password_request"
>

<attribute name="method">POST</attribute
>

<attribute name="path">/reset-password-requests</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandRequestResetPasswordToke
n

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</collectionOperation
>

</collectionOperations
>

<itemOperations
>

<itemOperation name="shop_update_reset_password_request"
>

<attribute name="method">PATCH</attribute
>

<attribute name="path">/reset-password-requests/{id}</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandResetPasswor
d

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</itemOperation
>

</itemOperations
>

</resource>
<resource
 

class=“SyliusBundleApiBundleCommandResetPassword
"

shortName="ResetPasswordRequest"
>

<collectionOperations
>

<collectionOperation name="shop_create_reset_password_request">
<attribute name="method">POST</attribute
>

<attribute name="path">/reset-password-requests</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandRequestResetPasswordToke
n

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</collectionOperation
>

</collectionOperations
>

<itemOperations
>

<itemOperation name="shop_update_reset_password_request"
>

<attribute name="method">PATCH</attribute
>

<attribute name="path">/reset-password-requests/{id}</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandResetPasswor
d

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</itemOperation
>

</itemOperations
>

</resource>
<resource
 

class=“SyliusBundleApiBundleCommandResetPassword
"

shortName="ResetPasswordRequest"
>

<collectionOperations
>

<collectionOperation name="shop_create_reset_password_request"
>

<attribute name="method">POST</attribute
>

<attribute name="path">/reset-password-requests</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandRequestResetPasswordToke
n

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</collectionOperation
>

</collectionOperations
>

<itemOperations
>

<itemOperation name="shop_update_reset_password_request">
<attribute name="method">PATCH</attribute
>

<attribute name="path">/reset-password-requests/{id}</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandResetPasswor
d

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</itemOperation
>

</itemOperations
>

</resource>
<resource
 

class=“SyliusBundleApiBundleCommandResetPassword
"

shortName="ResetPasswordRequest"
>

<collectionOperations
>

<collectionOperation name="shop_create_reset_password_request"
>

<attribute name="method">POST</attribute
>

<attribute name="path">/reset-password-requests</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandRequestResetPasswordToke
n

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</collectionOperation
>

</collectionOperations
>

<itemOperations
>

<itemOperation name="shop_update_reset_password_request"
>

<attribute name="method">PATCH</attribute
>

<attribute name="path">/reset-password-requests/{id}</attribute
>

<attribute name=“input"
>

SyliusBundleApiBundleCommandResetPasswor
d

</attribute
>

<attribute name="output">false</attribute
>

<attribute name="status">202</attribute
>

</itemOperation
>

</itemOperations
>

</resource>
Testing Architecture
Photo by Danist Soh on Unsplash
Sylius aka BDD Warriors
1500+ scenario
s

17000+ steps
~2000 scenario
s

~22000 steps
Behat
Business oriented scenarios
Gherkin notation
Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background:
Given there is a user "ted@example.com" identi
fi
ed by "bear
"

Scenario: Sign in with email and passwor
d

When I want to log in with the "ted@example.com" email and the "bear" passwor
d

Then I should be logged in
Great to keep conversation
about features
Abstraction over the
implementation
How to test our new
infrastructure?
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background
:

Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @ap
i

Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background
:

Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @api
Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background
:

Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @ap
i

Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background
:

Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @ap
i

Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background
:

Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @ap
i

Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background:
Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @ap
i

Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
/*
*

* @When I log i
n

*
/

public function iLogIn(
)

{

$this->loginPage->logIn()
;

}
@customer_logi
n

Feature: Signing in to the stor
e

In order to view my order
s

As a Visito
r

I want to be able to log in to the stor
e

Background:
Given the store operates on a single channel in "United States
"

And there is a user "ted@example.com" identi
fi
ed by "bear
"

@ui @api
Scenario: Sign in with email and passwor
d

When I want to log i
n

And I specify the username as "ted@example.com
"

And I specify the password as "bear
"

And I log i
n

Then I should be logged in
/*
*

* @When I log i
n

*
/

public function iLogIn(): voi
d

{

$this->client->call()
;

}
Behat as migration tool
Cons
Implementation overhead


New syntax to be familiar with
We didn’t seen our APIs
that much
How to keep contracts and
design our APIs?
PHPUnit
Whole response easily visible
{

"@context": "/api/v2/contexts/Payment"
,

"@id": "/api/v2/shop/payments/@integer@"
,

"@type": "Payment"
,

"order": "/api/v2/shop/orders/nAWw2jewpA"
,

"id": @integer@
,

"method":
{

"@id": "/api/v2/shop/payment-methods/CASH_ON_DELIVERY"
,

"@type": "PaymentMethod"
,

"name": "Cash on delivery
"

}
,

"currencyCode": "USD"
,

"amount": 6500
,

"state": "new"
,

"details": []
,

"createdAt": "@string@"
,

"updatedAt": "@string@
"

}
It will fail if anything will be
removed or added
Easy to setup and maintain
lchrusciel/ApiTestCase


or


Internal Api Platform ApiTestCase
Simpli
fi
ed tests only
Mostly one API call only


Arrangement => DB
fi
xtures + commands


No business
fl
ow checks
/** @test *
/

public function it_gets_details_about_product_variant(): voi
d

{

$this->loadFixturesFromFile('test_data.yaml')
;

$this->client->request
(

'GET'
,

'/api/v2/shop/product-variants/MUG_BLUE',
 

[],
 

[],
 

self::CONTENT_TYPE_HEADE
R

)
;

$response = $this->client->getResponse()
;

$this->assertResponse($response, 'get_product_variant_response', Response::HTTP_OK)
;

}
/** @test *
/

public function it_gets_details_about_product_variant(): voi
d

{

$this->loadFixturesFromFile('test_data.yaml')
;

$this->client->request
(

'GET'
,

'/api/v2/shop/product-variants/MUG_BLUE',
 

[],
 

[],
 

self::CONTENT_TYPE_HEADE
R

)
;

$response = $this->client->getResponse()
;

$this->assertResponse($response, 'get_product_variant_response', Response::HTTP_OK)
;

}
/** @test *
/

public function it_gets_details_about_product_variant(): voi
d

{

$this->loadFixturesFromFile('test_data.yaml')
;

$this->client->request
(

'GET'
,

'/api/v2/shop/product-variants/MUG_BLUE',
 

[],
 

[],
 

self::CONTENT_TYPE_HEADE
R

)
;

$response = $this->client->getResponse()
;

$this->assertResponse($response, 'get_product_variant_response', Response::HTTP_OK)
;

}
/** @test *
/

public function it_gets_details_about_product_variant(): voi
d

{

$this->loadFixturesFromFile('test_data.yaml')
;

$this->client->request
(

'GET'
,

'/api/v2/shop/product-variants/MUG_BLUE',
 

[],
 

[],
 

self::CONTENT_TYPE_HEADE
R

)
;

$response = $this->client->getResponse()
;

$this->assertResponse($response, 'get_product_variant_response', Response::HTTP_OK)
;

}
/** @test */
public function it_gets_details_about_product_variant(): voi
d

{

$this->loadFixturesFromFile('test_data.yaml')
;

$this->client->request
(

'GET'
,

'/api/v2/shop/product-variants/MUG_BLUE',
 

[],
 

[],
 

self::CONTENT_TYPE_HEADE
R

)
;

$response = $this->client->getResponse()
;

$this->assertResponse($response, 'get_product_variant_response', Response::HTTP_OK)
;

}
{

"@context": "/api/v2/contexts/ProductVariant"
,

"@id": "/api/v2/shop/product-variants/MUG_BLUE"
,

"@type": "ProductVariant"
,

"id": @integer@
,

"onHand": 10
,

"code": "MUG_BLUE"
,

"currentStock": 5
,

"product": "/api/v2/shop/products/MUG"
,

"optionValues":
[

"/api/v2/shop/product-option-values/COLOR_BLUE
"

]
,

"translations":
{

"en_US":
{

"@id": "/api/v2/shop/product-variant-translation/@integer@"
,

"@type": "ProductVariantTranslation"
,

"id": @integer@
,

"name": "Blue Mug"
,

"locale": "en_US
"

}

}
,

"price": 2000
,

"originalPrice": 2000
,

"inStock": tru
e

}
Cons
Developer oriented usage
Summary
What are the pros & cons of
this integration?
https://master.demo.sylius.com/api/v2/docs
@Sylius
Thank you!
@lukaszchrusciel

Contenu connexe

Tendances

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
 
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
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopI Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopApigee | Google Cloud
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseChristian Melchior
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
Spring Boot Interview Questions | Edureka
Spring Boot Interview Questions | EdurekaSpring Boot Interview Questions | Edureka
Spring Boot Interview Questions | EdurekaEdureka!
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.David Gómez García
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Hitesh-Java
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oopyrcorr
 
DDD (Debugger Driven Development)
DDD (Debugger Driven Development)DDD (Debugger Driven Development)
DDD (Debugger Driven Development)Carlos Granados
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
 

Tendances (20)

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
 
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
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 
Langage C#
Langage C#Langage C#
Langage C#
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Spring security
Spring securitySpring security
Spring security
 
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge WorkshopI Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
 
Coroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in PractiseCoroutines for Kotlin Multiplatform in Practise
Coroutines for Kotlin Multiplatform in Practise
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Spring Boot Interview Questions | Edureka
Spring Boot Interview Questions | EdurekaSpring Boot Interview Questions | Edureka
Spring Boot Interview Questions | Edureka
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans Spring - Part 1 - IoC, Di and Beans
Spring - Part 1 - IoC, Di and Beans
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oop
 
DDD (Debugger Driven Development)
DDD (Debugger Driven Development)DDD (Debugger Driven Development)
DDD (Debugger Driven Development)
 
Understanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring BootUnderstanding MicroSERVICE Architecture with Java & Spring Boot
Understanding MicroSERVICE Architecture with Java & Spring Boot
 
Monadic Java
Monadic JavaMonadic Java
Monadic Java
 

Similaire à Sylius and Api Platform The story of integration

Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For BeginnersJonathan Wage
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Innomatic Platform
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftOleksandr Stepanov
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin GeneratorJohn Cleveley
 
Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)James Titcumb
 
Application Layer in PHP
Application Layer in PHPApplication Layer in PHP
Application Layer in PHPPer Bernhardt
 
How to switch stack without downtime
How to switch stack without downtimeHow to switch stack without downtime
How to switch stack without downtimeFabien Penso
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)Oleg Zinchenko
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Kacper Gunia
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code lessAnton Novikau
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java DevelopersYakov Fain
 
Code Generation in Magento 2
Code Generation in Magento 2Code Generation in Magento 2
Code Generation in Magento 2Sergii Shymko
 
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
 
Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)James Titcumb
 
AEM & eCommerce integration
AEM & eCommerce integrationAEM & eCommerce integration
AEM & eCommerce integrationLokesh BS
 
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...AFAS Software
 
Developing A Real World Logistic Application With Oracle Application - UKOUG ...
Developing A Real World Logistic Application With Oracle Application - UKOUG ...Developing A Real World Logistic Application With Oracle Application - UKOUG ...
Developing A Real World Logistic Application With Oracle Application - UKOUG ...Roel Hartman
 

Similaire à Sylius and Api Platform The story of integration (20)

Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 
Event Sourcing with php
Event Sourcing with phpEvent Sourcing with php
Event Sourcing with php
 
Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)Crafting Quality PHP Applications (Bucharest Tech Week 2017)
Crafting Quality PHP Applications (Bucharest Tech Week 2017)
 
Application Layer in PHP
Application Layer in PHPApplication Layer in PHP
Application Layer in PHP
 
How to switch stack without downtime
How to switch stack without downtimeHow to switch stack without downtime
How to switch stack without downtime
 
DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)DDD on example of Symfony (Webcamp Odessa 2014)
DDD on example of Symfony (Webcamp Odessa 2014)
 
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
Domain-driven Design in PHP and Symfony - Drupal Camp Wroclaw!
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java Developers
 
Using the Windows 8 Runtime from C++
Using the Windows 8 Runtime from C++Using the Windows 8 Runtime from C++
Using the Windows 8 Runtime from C++
 
Code Generation in Magento 2
Code Generation in Magento 2Code Generation in Magento 2
Code Generation in Magento 2
 
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
 
Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)Crafting Quality PHP Applications (PHP Benelux 2018)
Crafting Quality PHP Applications (PHP Benelux 2018)
 
AEM & eCommerce integration
AEM & eCommerce integrationAEM & eCommerce integration
AEM & eCommerce integration
 
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...
Michiel Overeem (AFAS) - Enterprise software schaalbaar maken met Service Fab...
 
Developing A Real World Logistic Application With Oracle Application - UKOUG ...
Developing A Real World Logistic Application With Oracle Application - UKOUG ...Developing A Real World Logistic Application With Oracle Application - UKOUG ...
Developing A Real World Logistic Application With Oracle Application - UKOUG ...
 

Plus de Ł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
 
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
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..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
 
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
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source projectŁukasz Chruściel
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectŁukasz Chruściel
 

Plus de Łukasz Chruściel (18)

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
 
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
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..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
 
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
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source project
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius project
 
Why do I love and hate php?
Why do I love and hate php?Why do I love and hate php?
Why do I love and hate php?
 

Dernier

Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 

Dernier (20)

Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 

Sylius and Api Platform The story of integration