SlideShare une entreprise Scribd logo
1  sur  71
© 2017 Magento, Inc. Page | 1
API Design
Best practices
Igor Miniailo
Magento 2 Architect
© 2017 Magento, Inc. Page | 2
© 2017 Magento, Inc. Page | 3
© 2017 Magento, Inc. Page | 4
Why is API so crucial?
© 2017 Magento, Inc. Page | 5
© 2017 Magento, Inc. Page | 6
© 2017 Magento, Inc. Page | 7
© 2017 Magento, Inc. Page | 8
Semantic Versioning
Version numbers are in the format
MAJOR.MINOR.PATCH, where:
– MAJOR indicates incompatible API changes
– MINOR indicates backward-compatible
functionality has been added
– PATCH indicates backward-compatible bug
fixes
© 2017 Magento, Inc. Page | 9
The backward compatibility policy
applies to PHP code annotated with
@api
© 2017 Magento, Inc. Page | 10
Public and Private code
© 2017 Magento, Inc. Page | 11
Public vs Private code
Private code is not supposed to
be used by third party modules,
so, in most cases, its
modifications will only trigger
PATCH version bumps.
Changes in public code always
trigger MINOR or MAJOR
version bumps.
© 2017 Magento, Inc. Page | 12
What examples of Public code Magento has?
• PHP Interface (marked with @api)
• PHP Class (marked with @api)
• Javascript Interface (marked with @api)
• Javascript Class (marked with @api)
• Virtual Type (marked with @api)
• URL paths
• Console commands and their arguments
• Less Variables & Mixins
• Message queue topics and their data types
• UI component declarations
• Layout handles declared by modules
• Events triggered by component (both static dynamic)
• Schema of configuration types introduced by module
• Structure of System Configuration fields used by module
© 2017 Magento, Inc. Page | 13
API vs SPI (Extension Points)
A PHP Interface in Magento can be used several ways by the core
product and extension developers.
• As an API. is a set of interfaces and their
implementations that a module provides to other
modules
• As a Service Provider Interface (SPI). is a set of
interfaces that a module uses internally and allows their
implementation by other modules.
• As both. APIs and SPIs are not mutually exclusive.
© 2017 Magento, Inc. Page | 14
After the code is released, both API and SPI can
be evolved in a backwards-compatible way. But
both have their specific limitations.
© 2017 Magento, Inc. Page | 15
© 2017 Magento, Inc. Page | 16
© 2017 Magento, Inc. Page | 17
© 2017 Magento, Inc. Page | 18
© 2017 Magento, Inc. Page | 19
© 2017 Magento, Inc. Page | 20
We do not distinguish them separately.
SPIs are annotated the same as APIs.
© 2017 Magento, Inc. Page | 21
Who decides whether interface/class belong to API or SPI?
YOU
© 2017 Magento, Inc. Page | 22
Dependency Rules API
If a module uses (calls) an API, it should be dependent on the MAJOR
version.
API dependency example
{
...
"require": {
"magento/module-customer": "~100.0", // (>=100.0 <101.0.0)
},
...
}
© 2017 Magento, Inc. Page | 23
Dependency Rules SPI
If a module implements an API/SPI, it should be dependent on the
MAJOR+MINOR version.
SPI dependency example
{
...
"require": {
"magento/module-customer": "~100.0.0", // (>=100.0.0 <100.1.0)
},
...
}
© 2017 Magento, Inc. Page | 24
http://devdocs.magento.com/guides/v2.1/release-notes/backward-
incompatible-changes-2.1.html
© 2017 Magento, Inc. Page | 25
Prohibited Code Changes
© 2017 Magento, Inc. Page | 26
• Interface/class removal
• Public & protected method removal
• Introduction of a method to a class or
interface
PHP - Prohibited Code Changes
© 2017 Magento, Inc. Page | 27
MagentoCatalogApiCategoryRepositoryInterface
© 2017 Magento, Inc. Page | 28
MagentoCatalogApiCategoryListInterface
© 2017 Magento, Inc. Page | 29
PHP - Prohibited Code Changes
• Static function removal
• Parameter addition in public methods
• Parameter addition in protected
methods
© 2017 Magento, Inc. Page | 30
© 2017 Magento, Inc. Page | 31
PHP - Prohibited Code Changes
• Method argument type modification
• Modification of types of thrown
exceptions (unless a new exception is
a subtype of the old one)
• Constructor modification
© 2017 Magento, Inc. Page | 32
class ExistingClass
{
/**
* @var NewDependencyInterface $newDependency
*/
private $newDependency;
public function __construct(
OldDependencyIntreface $oldDependency,
$oldRequiredConstructorParameter,
$oldOptinalConstructorParameter = null,
NewDependencyInterface $newDependency = null
) {
...
$this>newDependency = $newDependency ?: MagentoFrameworkAppObjectManager::getInstance()
->get(NewDependencyInterface::class);
...
}
public function existingFunction() {
// Existing functionality
...
// Use $this->newDependency wherever the new dependency is needed
...
}
}
© 2017 Magento, Inc. Page | 33
PHP - Prohibited Code Changes
• Modifying the default values of
optional arguments in public and
protected methods
• Removing or renaming constants
© 2017 Magento, Inc. Page | 34
The main rule is that backwards compatibility
is more important than niceness and effort of
the implementation.
© 2017 Magento, Inc. Page | 35
Coupling Between Objects Reaches Its Limit with
a New Dependency
© 2017 Magento, Inc. Page | 36
We MUST do continuous Refactoring!
Backward Compatibility should not be an excuse
for not doing refactoring!
© 2017 Magento, Inc. Page | 37
Backward Compatible Fix
*it works (most of the time), but code quality
is far from good enough
© 2017 Magento, Inc. Page | 38
Good object oriented programming in the service layer is basically
functional programming:
• constructor injection
• immutable state
• single responsibility principle
• uniform interfaces
• value objects passed across services
Bringing these concepts to an extreme leads to single-method,
immutable objects.
© 2017 Magento, Inc. Page | 39
© 2017 Magento, Inc. Page | 40
Why execute but not __invoke?
© 2017 Magento, Inc. Page | 41
PHP 7
• Return Types
• Scalar Type hinting
© 2017 Magento, Inc. Page | 42
Repositories
In Magento 2 Repositories are considered as an implementation
of Facade pattern which provides a simplified interface to a larger body
of code responsible for Domain Entity management.
The main intention is to make API more readable and reduce
dependencies of business logic code on the inner workings of a
module, since most code uses the facade, thus allowing more flexibility
in developing the system.
© 2017 Magento, Inc. Page | 43
Repositories
© 2017 Magento, Inc. Page | 44
© 2017 Magento, Inc. Page | 45
© 2017 Magento, Inc. Page | 46
Good API design
Don't make your client do anything you can do
for them (this reduces the amount of boilerplate
code your client will have)
© 2017 Magento, Inc. Page | 47
Headless Magento
© 2017 Magento, Inc. Page | 48
RESTful API
© 2017 Magento, Inc. Page | 49
Swagger
http://devdocs.magento.com/guides/v2.2/rest/generate-local.html
© 2017 Magento, Inc. Page | 50
MSI Base Concept
© 2017 Magento, Inc. Page | 51
LSD
* Load – Save – Delete
© 2017 Magento, Inc. Page | 52
2 Business operations – 1 API
1. Stock Setting (Import, Synchronization with ERP)
2. Stock Deduction (Checkout)
© 2017 Magento, Inc. Page | 53
Bad designed APIs could lead to Big issues
© 2017 Magento, Inc. Page | 54
The reason of DB Wait Lock on Checkout
© 2017 Magento, Inc. Page | 55
Reservation - the entity is used when the order is placed and
we need to reserve some product quantity in stock.
Reservations are append only operations and help us to prevent
blocking operations and race conditions at the time of checkout.
Reservation mechanism
https://github.com/magento-engcom/msi/wiki/Reservations
© 2017 Magento, Inc. Page | 56
Order Placement – Step 1
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
No records
Available Qty: 15qty (data from index, empty reservations)
© 2017 Magento, Inc. Page | 57
Order Placement – Step 2
Action: Customer buys 5 products on frontend
© 2017 Magento, Inc. Page | 58
Order Placement – Step 3
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
Available Qty: 10qty (data from index 15, apply all reservations -5)
Data is NOT changed Reservation has been
added
© 2017 Magento, Inc. Page | 59
Order Placement – Step 4
Action: Admin makes a re-order 3 products out of 5 returned,
and new order consists of 2 products
© 2017 Magento, Inc. Page | 60
Order Placement – Step 5
France Warehouse
SKU-1: 5qty
EU Stock
SKU-1: 15qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
SKU-1: +3
Available Qty: 13qty (data from index 15, apply reservations -5+3)
Data is NOT changed
Reservation has been added
© 2017 Magento, Inc. Page | 61
Order Placement – Step 6
Action: Admin completes order. Re-index was run.
© 2017 Magento, Inc. Page | 62
Order Placement – Step 7
France Warehouse
SKU-1: 3qty
EU Stock
SKU-1: 13qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
SKU-1: -5
SKU-1: +3
SKU-1: +2
Available Qty: 13qty (data from index 13, apply reservations -5+3+2=0)
Data is CHANGED Compensation Reservation
has been added
© 2017 Magento, Inc. Page | 63
Order Placement – Step 8
Action: Reservation cleaning
Looping through these reservations we could find reservations
which in sum gives 0 (Zero) and remove them.
© 2017 Magento, Inc. Page | 64
Order Placement – Step 9
(like Step 1)
France Warehouse
SKU-1: 3qty
EU Stock
SKU-1: 13qty
Italy Warehouse
SKU-1: 10qty
Raw data Index Reservations
Available Qty: 13qty (data from index, empty reservations)
Data is NOT changed Reservations have been removed
No records
© 2017 Magento, Inc. Page | 65
API interface to test
© 2017 Magento, Inc. Page | 66
So, what’s about testing?
© 2017 Magento, Inc. Page | 67
What about fixtures?
© 2017 Magento, Inc. Page | 68
© 2017 Magento, Inc. Page | 69
© 2017 Magento, Inc. Page | 70
#MageConf, Kyiv 15-16 of December
http://mageconf.com/
© 2017 Magento, Inc. Page | 71
Q & A
@iminyaylo
engcom@magent.com

Contenu connexe

Tendances

Volodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformVolodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformMeet Magento Italy
 
Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Alessandro Ronchi
 
Experience in Magento Community Projects
Experience in Magento Community ProjectsExperience in Magento Community Projects
Experience in Magento Community ProjectsMagecom UK Limited
 
Jacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with KubernetesJacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with KubernetesMeet Magento Italy
 
James Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With YouJames Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With YouMeet Magento Italy
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZIgor Miniailo
 
Mli 2017 technical backward compatibility
Mli 2017 technical backward compatibilityMli 2017 technical backward compatibility
Mli 2017 technical backward compatibilityHanoi MagentoMeetup
 
Magento 2 Declarative Schema
Magento 2 Declarative SchemaMagento 2 Declarative Schema
Magento 2 Declarative Schemaatishgoswami
 
Mli 2017 technical EQP & marketplace
Mli 2017 technical EQP & marketplaceMli 2017 technical EQP & marketplace
Mli 2017 technical EQP & marketplaceHanoi MagentoMeetup
 
Mli 2017 technical powering tomorrow_2.2
Mli 2017 technical powering tomorrow_2.2Mli 2017 technical powering tomorrow_2.2
Mli 2017 technical powering tomorrow_2.2Hanoi MagentoMeetup
 
Webinar - Rapise v6.6 | New Features and Enhancements
Webinar - Rapise v6.6 | New Features and EnhancementsWebinar - Rapise v6.6 | New Features and Enhancements
Webinar - Rapise v6.6 | New Features and EnhancementsInflectra
 
Org-dependent Unlocked Packages for ISVs
Org-dependent Unlocked Packages for ISVsOrg-dependent Unlocked Packages for ISVs
Org-dependent Unlocked Packages for ISVsCodeScience
 
TRAX technical highlights
TRAX technical highlightsTRAX technical highlights
TRAX technical highlightsESUG
 
Magento Community Hangouts 10 Feb, 2021 PHP 8 support
Magento Community Hangouts  10 Feb, 2021 PHP 8 supportMagento Community Hangouts  10 Feb, 2021 PHP 8 support
Magento Community Hangouts 10 Feb, 2021 PHP 8 supportStanislavIdolov
 
Major Spira v6.3 Usability & Performance Enhancements Unveiled
Major Spira v6.3 Usability & Performance Enhancements UnveiledMajor Spira v6.3 Usability & Performance Enhancements Unveiled
Major Spira v6.3 Usability & Performance Enhancements UnveiledInflectra
 

Tendances (15)

Volodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformVolodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design Platform
 
Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3Awesome architectures in Magento 2.3
Awesome architectures in Magento 2.3
 
Experience in Magento Community Projects
Experience in Magento Community ProjectsExperience in Magento Community Projects
Experience in Magento Community Projects
 
Jacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with KubernetesJacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
 
James Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With YouJames Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With You
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
 
Mli 2017 technical backward compatibility
Mli 2017 technical backward compatibilityMli 2017 technical backward compatibility
Mli 2017 technical backward compatibility
 
Magento 2 Declarative Schema
Magento 2 Declarative SchemaMagento 2 Declarative Schema
Magento 2 Declarative Schema
 
Mli 2017 technical EQP & marketplace
Mli 2017 technical EQP & marketplaceMli 2017 technical EQP & marketplace
Mli 2017 technical EQP & marketplace
 
Mli 2017 technical powering tomorrow_2.2
Mli 2017 technical powering tomorrow_2.2Mli 2017 technical powering tomorrow_2.2
Mli 2017 technical powering tomorrow_2.2
 
Webinar - Rapise v6.6 | New Features and Enhancements
Webinar - Rapise v6.6 | New Features and EnhancementsWebinar - Rapise v6.6 | New Features and Enhancements
Webinar - Rapise v6.6 | New Features and Enhancements
 
Org-dependent Unlocked Packages for ISVs
Org-dependent Unlocked Packages for ISVsOrg-dependent Unlocked Packages for ISVs
Org-dependent Unlocked Packages for ISVs
 
TRAX technical highlights
TRAX technical highlightsTRAX technical highlights
TRAX technical highlights
 
Magento Community Hangouts 10 Feb, 2021 PHP 8 support
Magento Community Hangouts  10 Feb, 2021 PHP 8 supportMagento Community Hangouts  10 Feb, 2021 PHP 8 support
Magento Community Hangouts 10 Feb, 2021 PHP 8 support
 
Major Spira v6.3 Usability & Performance Enhancements Unveiled
Major Spira v6.3 Usability & Performance Enhancements UnveiledMajor Spira v6.3 Usability & Performance Enhancements Unveiled
Major Spira v6.3 Usability & Performance Enhancements Unveiled
 

Similaire à Igor Miniailo - Magento 2 API Design Best Practices

Testing in Magento 2
Testing in Magento 2 Testing in Magento 2
Testing in Magento 2 Igor Miniailo
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesIgor Miniailo
 
API design best practices
API design best practicesAPI design best practices
API design best practicesIgor Miniailo
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarIgor Miniailo
 
Magento 2 Best Practice MLUK17
Magento 2 Best Practice MLUK17Magento 2 Best Practice MLUK17
Magento 2 Best Practice MLUK17Brent W Peterson
 
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceEugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceMeet Magento Italy
 
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Igor Miniailo
 
Automated Testing in Magento 2
Automated Testing in Magento 2Automated Testing in Magento 2
Automated Testing in Magento 2Magecom UK Limited
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Igor Miniailo
 
API Design Best Practices by Igor Miniailo
API Design Best Practices by Igor MiniailoAPI Design Best Practices by Igor Miniailo
API Design Best Practices by Igor MiniailoMagecom UK Limited
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLIgor Miniailo
 
Mli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsMli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsHanoi MagentoMeetup
 
The long way from Monolith to Microservices
The long way from Monolith to MicroservicesThe long way from Monolith to Microservices
The long way from Monolith to MicroservicesIgor Miniailo
 
Oleksii Korshenko - Magento 2 Backwards Compatible Policy
Oleksii Korshenko - Magento 2 Backwards Compatible PolicyOleksii Korshenko - Magento 2 Backwards Compatible Policy
Oleksii Korshenko - Magento 2 Backwards Compatible PolicyMeet Magento Italy
 
Architecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoArchitecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoIRJET Journal
 
Magento 2.2: It's Coming Right For You! | Colorado Magento Meetup
Magento 2.2: It's Coming Right For You! | Colorado Magento MeetupMagento 2.2: It's Coming Right For You! | Colorado Magento Meetup
Magento 2.2: It's Coming Right For You! | Colorado Magento MeetupKelly Mason
 
Beyond Gerrit @ Gerrit User Summit 2017, London
Beyond Gerrit @ Gerrit User Summit 2017, LondonBeyond Gerrit @ Gerrit User Summit 2017, London
Beyond Gerrit @ Gerrit User Summit 2017, LondonJacek Centkowski
 
Magento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data PatchesMagento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data Patchesatishgoswami
 
Architecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryArchitecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryIgor Miniailo
 
Monitoring your cache effectiveness in Magento 2
Monitoring your cache effectiveness in Magento 2Monitoring your cache effectiveness in Magento 2
Monitoring your cache effectiveness in Magento 2Tony Brown
 

Similaire à Igor Miniailo - Magento 2 API Design Best Practices (20)

Testing in Magento 2
Testing in Magento 2 Testing in Magento 2
Testing in Magento 2
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best Practices
 
API design best practices
API design best practicesAPI design best practices
API design best practices
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide Webinar
 
Magento 2 Best Practice MLUK17
Magento 2 Best Practice MLUK17Magento 2 Best Practice MLUK17
Magento 2 Best Practice MLUK17
 
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceEugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
 
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
 
Automated Testing in Magento 2
Automated Testing in Magento 2Automated Testing in Magento 2
Automated Testing in Magento 2
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2
 
API Design Best Practices by Igor Miniailo
API Design Best Practices by Igor MiniailoAPI Design Best Practices by Igor Miniailo
API Design Best Practices by Igor Miniailo
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NL
 
Mli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensionsMli 2017 technical first steps to building secure Magento extensions
Mli 2017 technical first steps to building secure Magento extensions
 
The long way from Monolith to Microservices
The long way from Monolith to MicroservicesThe long way from Monolith to Microservices
The long way from Monolith to Microservices
 
Oleksii Korshenko - Magento 2 Backwards Compatible Policy
Oleksii Korshenko - Magento 2 Backwards Compatible PolicyOleksii Korshenko - Magento 2 Backwards Compatible Policy
Oleksii Korshenko - Magento 2 Backwards Compatible Policy
 
Architecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoArchitecture and Analytical Study of Magento
Architecture and Analytical Study of Magento
 
Magento 2.2: It's Coming Right For You! | Colorado Magento Meetup
Magento 2.2: It's Coming Right For You! | Colorado Magento MeetupMagento 2.2: It's Coming Right For You! | Colorado Magento Meetup
Magento 2.2: It's Coming Right For You! | Colorado Magento Meetup
 
Beyond Gerrit @ Gerrit User Summit 2017, London
Beyond Gerrit @ Gerrit User Summit 2017, LondonBeyond Gerrit @ Gerrit User Summit 2017, London
Beyond Gerrit @ Gerrit User Summit 2017, London
 
Magento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data PatchesMagento 2.3 Schema and Data Patches
Magento 2.3 Schema and Data Patches
 
Architecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryArchitecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source Inventory
 
Monitoring your cache effectiveness in Magento 2
Monitoring your cache effectiveness in Magento 2Monitoring your cache effectiveness in Magento 2
Monitoring your cache effectiveness in Magento 2
 

Plus de Atwix

Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Atwix
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Atwix
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Atwix
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Atwix
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Atwix
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyAtwix
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Atwix
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoAtwix
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewAtwix
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейAtwix
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoAtwix
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleAtwix
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Atwix
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Atwix
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Atwix
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнAtwix
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoAtwix
 
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...Atwix
 
Артем Сухорослов - Meet Magento Ukraine - Коммерсанты vs. инженеры как помир...
Артем Сухорослов - Meet Magento Ukraine -  Коммерсанты vs. инженеры как помир...Артем Сухорослов - Meet Magento Ukraine -  Коммерсанты vs. инженеры как помир...
Артем Сухорослов - Meet Magento Ukraine - Коммерсанты vs. инженеры как помир...Atwix
 

Plus de Atwix (20)

Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistency
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
 
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...
Thomas Fleck - Meet Magento Ukraine - How Magento and open source change the ...
 
Артем Сухорослов - Meet Magento Ukraine - Коммерсанты vs. инженеры как помир...
Артем Сухорослов - Meet Magento Ukraine -  Коммерсанты vs. инженеры как помир...Артем Сухорослов - Meet Magento Ukraine -  Коммерсанты vs. инженеры как помир...
Артем Сухорослов - Meet Magento Ukraine - Коммерсанты vs. инженеры как помир...
 

Dernier

定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一Fs
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Sonam Pathan
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Sonam Pathan
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书rnrncn29
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一Fs
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012rehmti665
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITMgdsc13
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxDyna Gilbert
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhimiss dipika
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Paul Calvano
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Dana Luther
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxBipin Adhikari
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMartaLoveguard
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)Christopher H Felton
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationLinaWolf1
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa494f574xmv
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一Fs
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作ys8omjxb
 

Dernier (20)

定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
定制(UAL学位证)英国伦敦艺术大学毕业证成绩单原版一比一
 
Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170Call Girls Near The Suryaa Hotel New Delhi 9873777170
Call Girls Near The Suryaa Hotel New Delhi 9873777170
 
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
Call Girls In The Ocean Pearl Retreat Hotel New Delhi 9873777170
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
 
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
定制(Management毕业证书)新加坡管理大学毕业证成绩单原版一比一
 
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
Call Girls South Delhi Delhi reach out to us at ☎ 9711199012
 
Git and Github workshop GDSC MLRITM
Git and Github  workshop GDSC MLRITMGit and Github  workshop GDSC MLRITM
Git and Github workshop GDSC MLRITM
 
Top 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptxTop 10 Interactive Website Design Trends in 2024.pptx
Top 10 Interactive Website Design Trends in 2024.pptx
 
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in  Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Jamuna Vihar Delhi reach out to us at 🔝9953056974🔝
 
Contact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New DelhiContact Rya Baby for Call Girls New Delhi
Contact Rya Baby for Call Girls New Delhi
 
Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24Font Performance - NYC WebPerf Meetup April '24
Font Performance - NYC WebPerf Meetup April '24
 
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
Packaging the Monolith - PHP Tek 2024 (Breaking it down one bite at a time)
 
Intellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptxIntellectual property rightsand its types.pptx
Intellectual property rightsand its types.pptx
 
Magic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptxMagic exist by Marta Loveguard - presentation.pptx
Magic exist by Marta Loveguard - presentation.pptx
 
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
A Good Girl's Guide to Murder (A Good Girl's Guide to Murder, #1)
 
PHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 DocumentationPHP-based rendering of TYPO3 Documentation
PHP-based rendering of TYPO3 Documentation
 
Film cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasaFilm cover research (1).pptxsdasdasdasdasdasa
Film cover research (1).pptxsdasdasdasdasdasa
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
定制(AUT毕业证书)新西兰奥克兰理工大学毕业证成绩单原版一比一
 
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
Potsdam FH学位证,波茨坦应用技术大学毕业证书1:1制作
 

Igor Miniailo - Magento 2 API Design Best Practices

  • 1. © 2017 Magento, Inc. Page | 1 API Design Best practices Igor Miniailo Magento 2 Architect
  • 2. © 2017 Magento, Inc. Page | 2
  • 3. © 2017 Magento, Inc. Page | 3
  • 4. © 2017 Magento, Inc. Page | 4 Why is API so crucial?
  • 5. © 2017 Magento, Inc. Page | 5
  • 6. © 2017 Magento, Inc. Page | 6
  • 7. © 2017 Magento, Inc. Page | 7
  • 8. © 2017 Magento, Inc. Page | 8 Semantic Versioning Version numbers are in the format MAJOR.MINOR.PATCH, where: – MAJOR indicates incompatible API changes – MINOR indicates backward-compatible functionality has been added – PATCH indicates backward-compatible bug fixes
  • 9. © 2017 Magento, Inc. Page | 9 The backward compatibility policy applies to PHP code annotated with @api
  • 10. © 2017 Magento, Inc. Page | 10 Public and Private code
  • 11. © 2017 Magento, Inc. Page | 11 Public vs Private code Private code is not supposed to be used by third party modules, so, in most cases, its modifications will only trigger PATCH version bumps. Changes in public code always trigger MINOR or MAJOR version bumps.
  • 12. © 2017 Magento, Inc. Page | 12 What examples of Public code Magento has? • PHP Interface (marked with @api) • PHP Class (marked with @api) • Javascript Interface (marked with @api) • Javascript Class (marked with @api) • Virtual Type (marked with @api) • URL paths • Console commands and their arguments • Less Variables & Mixins • Message queue topics and their data types • UI component declarations • Layout handles declared by modules • Events triggered by component (both static dynamic) • Schema of configuration types introduced by module • Structure of System Configuration fields used by module
  • 13. © 2017 Magento, Inc. Page | 13 API vs SPI (Extension Points) A PHP Interface in Magento can be used several ways by the core product and extension developers. • As an API. is a set of interfaces and their implementations that a module provides to other modules • As a Service Provider Interface (SPI). is a set of interfaces that a module uses internally and allows their implementation by other modules. • As both. APIs and SPIs are not mutually exclusive.
  • 14. © 2017 Magento, Inc. Page | 14 After the code is released, both API and SPI can be evolved in a backwards-compatible way. But both have their specific limitations.
  • 15. © 2017 Magento, Inc. Page | 15
  • 16. © 2017 Magento, Inc. Page | 16
  • 17. © 2017 Magento, Inc. Page | 17
  • 18. © 2017 Magento, Inc. Page | 18
  • 19. © 2017 Magento, Inc. Page | 19
  • 20. © 2017 Magento, Inc. Page | 20 We do not distinguish them separately. SPIs are annotated the same as APIs.
  • 21. © 2017 Magento, Inc. Page | 21 Who decides whether interface/class belong to API or SPI? YOU
  • 22. © 2017 Magento, Inc. Page | 22 Dependency Rules API If a module uses (calls) an API, it should be dependent on the MAJOR version. API dependency example { ... "require": { "magento/module-customer": "~100.0", // (>=100.0 <101.0.0) }, ... }
  • 23. © 2017 Magento, Inc. Page | 23 Dependency Rules SPI If a module implements an API/SPI, it should be dependent on the MAJOR+MINOR version. SPI dependency example { ... "require": { "magento/module-customer": "~100.0.0", // (>=100.0.0 <100.1.0) }, ... }
  • 24. © 2017 Magento, Inc. Page | 24 http://devdocs.magento.com/guides/v2.1/release-notes/backward- incompatible-changes-2.1.html
  • 25. © 2017 Magento, Inc. Page | 25 Prohibited Code Changes
  • 26. © 2017 Magento, Inc. Page | 26 • Interface/class removal • Public & protected method removal • Introduction of a method to a class or interface PHP - Prohibited Code Changes
  • 27. © 2017 Magento, Inc. Page | 27 MagentoCatalogApiCategoryRepositoryInterface
  • 28. © 2017 Magento, Inc. Page | 28 MagentoCatalogApiCategoryListInterface
  • 29. © 2017 Magento, Inc. Page | 29 PHP - Prohibited Code Changes • Static function removal • Parameter addition in public methods • Parameter addition in protected methods
  • 30. © 2017 Magento, Inc. Page | 30
  • 31. © 2017 Magento, Inc. Page | 31 PHP - Prohibited Code Changes • Method argument type modification • Modification of types of thrown exceptions (unless a new exception is a subtype of the old one) • Constructor modification
  • 32. © 2017 Magento, Inc. Page | 32 class ExistingClass { /** * @var NewDependencyInterface $newDependency */ private $newDependency; public function __construct( OldDependencyIntreface $oldDependency, $oldRequiredConstructorParameter, $oldOptinalConstructorParameter = null, NewDependencyInterface $newDependency = null ) { ... $this>newDependency = $newDependency ?: MagentoFrameworkAppObjectManager::getInstance() ->get(NewDependencyInterface::class); ... } public function existingFunction() { // Existing functionality ... // Use $this->newDependency wherever the new dependency is needed ... } }
  • 33. © 2017 Magento, Inc. Page | 33 PHP - Prohibited Code Changes • Modifying the default values of optional arguments in public and protected methods • Removing or renaming constants
  • 34. © 2017 Magento, Inc. Page | 34 The main rule is that backwards compatibility is more important than niceness and effort of the implementation.
  • 35. © 2017 Magento, Inc. Page | 35 Coupling Between Objects Reaches Its Limit with a New Dependency
  • 36. © 2017 Magento, Inc. Page | 36 We MUST do continuous Refactoring! Backward Compatibility should not be an excuse for not doing refactoring!
  • 37. © 2017 Magento, Inc. Page | 37 Backward Compatible Fix *it works (most of the time), but code quality is far from good enough
  • 38. © 2017 Magento, Inc. Page | 38 Good object oriented programming in the service layer is basically functional programming: • constructor injection • immutable state • single responsibility principle • uniform interfaces • value objects passed across services Bringing these concepts to an extreme leads to single-method, immutable objects.
  • 39. © 2017 Magento, Inc. Page | 39
  • 40. © 2017 Magento, Inc. Page | 40 Why execute but not __invoke?
  • 41. © 2017 Magento, Inc. Page | 41 PHP 7 • Return Types • Scalar Type hinting
  • 42. © 2017 Magento, Inc. Page | 42 Repositories In Magento 2 Repositories are considered as an implementation of Facade pattern which provides a simplified interface to a larger body of code responsible for Domain Entity management. The main intention is to make API more readable and reduce dependencies of business logic code on the inner workings of a module, since most code uses the facade, thus allowing more flexibility in developing the system.
  • 43. © 2017 Magento, Inc. Page | 43 Repositories
  • 44. © 2017 Magento, Inc. Page | 44
  • 45. © 2017 Magento, Inc. Page | 45
  • 46. © 2017 Magento, Inc. Page | 46 Good API design Don't make your client do anything you can do for them (this reduces the amount of boilerplate code your client will have)
  • 47. © 2017 Magento, Inc. Page | 47 Headless Magento
  • 48. © 2017 Magento, Inc. Page | 48 RESTful API
  • 49. © 2017 Magento, Inc. Page | 49 Swagger http://devdocs.magento.com/guides/v2.2/rest/generate-local.html
  • 50. © 2017 Magento, Inc. Page | 50 MSI Base Concept
  • 51. © 2017 Magento, Inc. Page | 51 LSD * Load – Save – Delete
  • 52. © 2017 Magento, Inc. Page | 52 2 Business operations – 1 API 1. Stock Setting (Import, Synchronization with ERP) 2. Stock Deduction (Checkout)
  • 53. © 2017 Magento, Inc. Page | 53 Bad designed APIs could lead to Big issues
  • 54. © 2017 Magento, Inc. Page | 54 The reason of DB Wait Lock on Checkout
  • 55. © 2017 Magento, Inc. Page | 55 Reservation - the entity is used when the order is placed and we need to reserve some product quantity in stock. Reservations are append only operations and help us to prevent blocking operations and race conditions at the time of checkout. Reservation mechanism https://github.com/magento-engcom/msi/wiki/Reservations
  • 56. © 2017 Magento, Inc. Page | 56 Order Placement – Step 1 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations No records Available Qty: 15qty (data from index, empty reservations)
  • 57. © 2017 Magento, Inc. Page | 57 Order Placement – Step 2 Action: Customer buys 5 products on frontend
  • 58. © 2017 Magento, Inc. Page | 58 Order Placement – Step 3 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 Available Qty: 10qty (data from index 15, apply all reservations -5) Data is NOT changed Reservation has been added
  • 59. © 2017 Magento, Inc. Page | 59 Order Placement – Step 4 Action: Admin makes a re-order 3 products out of 5 returned, and new order consists of 2 products
  • 60. © 2017 Magento, Inc. Page | 60 Order Placement – Step 5 France Warehouse SKU-1: 5qty EU Stock SKU-1: 15qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 SKU-1: +3 Available Qty: 13qty (data from index 15, apply reservations -5+3) Data is NOT changed Reservation has been added
  • 61. © 2017 Magento, Inc. Page | 61 Order Placement – Step 6 Action: Admin completes order. Re-index was run.
  • 62. © 2017 Magento, Inc. Page | 62 Order Placement – Step 7 France Warehouse SKU-1: 3qty EU Stock SKU-1: 13qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations SKU-1: -5 SKU-1: +3 SKU-1: +2 Available Qty: 13qty (data from index 13, apply reservations -5+3+2=0) Data is CHANGED Compensation Reservation has been added
  • 63. © 2017 Magento, Inc. Page | 63 Order Placement – Step 8 Action: Reservation cleaning Looping through these reservations we could find reservations which in sum gives 0 (Zero) and remove them.
  • 64. © 2017 Magento, Inc. Page | 64 Order Placement – Step 9 (like Step 1) France Warehouse SKU-1: 3qty EU Stock SKU-1: 13qty Italy Warehouse SKU-1: 10qty Raw data Index Reservations Available Qty: 13qty (data from index, empty reservations) Data is NOT changed Reservations have been removed No records
  • 65. © 2017 Magento, Inc. Page | 65 API interface to test
  • 66. © 2017 Magento, Inc. Page | 66 So, what’s about testing?
  • 67. © 2017 Magento, Inc. Page | 67 What about fixtures?
  • 68. © 2017 Magento, Inc. Page | 68
  • 69. © 2017 Magento, Inc. Page | 69
  • 70. © 2017 Magento, Inc. Page | 70 #MageConf, Kyiv 15-16 of December http://mageconf.com/
  • 71. © 2017 Magento, Inc. Page | 71 Q & A @iminyaylo engcom@magent.com

Notes de l'éditeur

  1. We promise to be backward compatible for classes and methods annotated with @api within MINOR and PATCH updates to our components. As changes are introduced, we annotate methods with @deprecated. The methods are removed only with the next MAJOR component version. 
  2. Let’s recap what we had with Magento 1 – where everything is an extension points. All the protected mess and so on. We can’t make changes in contract – all changes suppose to extend existing contract.
  3. Tilde = Significant Release Operator