Install API Platform. Design the API data model as a set of tiny plain old PHP classes. Instantly get:
- Fully featured dev environment with Symfony Flex and React containers, HTTP/2 and HTTPS support and a cache proxy
- Pagination, data validation, access control, relation embedding, filters and error handling
- Support for modern REST API formats: JSON-LD/Hydra, OpenAPI/Swagger, JSONAPI, HAL, JSON...
- GraphQL support
- An API responding in a just few milliseconds thanks to the builtin invalidation based cache mechanism
- A dynamically created Material Design admini interface (a la Sonata / EasyAdmin - but 100% client-side) built with React.
- Client apps skeletons: React/Redux, React Native, Vue.js, Angular...
Finally, deploy in 1 command on Google Container Engine or any cloud with a Kubernetes instance with the provided Helm chart.
Yes, you just need is describing a data model, just a few line of codes to get all of that!
6. APIs: the Heart of the New Web
Central point to access data
Encapsulate the business logic
Same features available everywhere:
webapps, mobile apps, IoT, customers, providers…
7. Progressive Web Apps
Downloaded only 1 time, works offline!
Sends async HTTP requests to the API
Huge ecosystem: React, Angular, Vue…
Holds the presentation logic
Static « website »: JS, HTML and CSS
Modernized stack:
ES2015, Babel, Webpack, Yarn, Flow, TypeScript, ReasonML…
8. Native Mobile Apps
Sync data by sending HTTP requests to the API
JS stack:
React Native, NativeScript
Downloaded from stores (App Store, Google Play)
Look’n’Feel consistent with the platform (iOS or Android)
9. Cloud Native Projects
Software built, tested and deployed continuously
Rich and open ecosystem:
Docker, Kubernetes, Mesos, Terraform…
Projects are hosted on public and private clouds
Containers and orchestration from dev stations to prod
11. Goals
Modern API formats
A rock-solid API-first project in minutes
Batteries included:
create, consume and deploy the API
Customizable, extensible, modular:
config, events, decoration…
18. Included (v2.1 - stable)
PHP FPM and Nginx containers, sensitive defaults for Symfony
Varnish container (more about this later)
Cross-platform Docker setup
MySQL container
Symfony Edition fine tuned for APIs
19. Upcoming Changes
HTTP/2 and HTTPS dev proxy
Containers for JS dev 🤔 🤗
Symfony Standard Edition Symfony Flex
Simplified directory structure
MySQL PostgreSQL
api-platform/api-platform#422
23. Create your
Class
PHPDoc extraction (optional)
The hook:@ApiResource
XML and YAML also supported
Doctrine integration (optional)
$ docker-compose exec php bin/console
doctrine:schema:update --force
Plain Old PHP Object
26. Out of the Box Features
JSON-LD + Hydra formats
But also… JSONAPI, HAL, XML, YAML, CSV and raw JSON…
OpenAPI (aka Swagger) doc
Nice UI (Swagger UI)
POST, GET (item and lists), PUT, DELETE
Pagination for lists (30 items per page), fully configurable
36. HTTP cache (invalidation)
GET responses generated only 1 time, then served by Varnish
(also work with CloudFlare and any cache proxy supporting tags)
Responses tagged with IRIs (URLs) of resources they contain
(including relations, embedded resources…)
When a write operation occurs cached responses containing outdated
data are purged
Builtin, single config flag, trusted proxies config provided
Browse https://localhost:444
41. Distribution
Compatible with all existing bundles
Shipped with Doctrine ORM
(soft dependency)
Flex app
Automatic route registration
42. Metadata Subsystem
Properties’ types and relations extracted with Symfony PropertyInfo
Guesses API’s structure (resources and properties)
from classes marked@ApiResource
Intermediate representation of the API structure
Used by Hypermedia normalizers (JSON-LD, Hydra, HAL…)
registered in the Symfony Serializer
46. JSON-LD
Standardized hypermedia format: W3C recommandation (2014)
Easy to use: a standard JSON document with some specials
keys (starting with @) and mapped with a context
Backed by Google, BBC, Microsoft, US & UK govs...
Compliant with technologies of the semantic web: RDF,
SPARQL, triple store...
JSON for Linked Data
58. Create React App
Babel: JavaScript compiler (ES2015+, JSX, Flow…)
App skeleton generator
All tools and configs to get started:
Webpack: module bundler (compile and package JS, CSS…)
$ yarn global add create-react-app
$ create-react-app my-app
$ cd my-app
$ yarn start
ESLint: find and report bugs, bad patterns…
Integrated web server, live reload, dev and debug tools
67. API Platform Admin
Sonata EasyAdmin-like but as a React PWA
Built on top of Admin On Rest (by Marmelab)
Material Design
Automatically generates the admin by parsing the Hydra API doc
Browse https://localhost:8001
74. React PWA Generator (default)
SensioGeneratorBundle-like, 100% client-side
Rock solid stack
$ yarn global add @api-platform/client-generator
Twitter Bootstrap support + accessibility (ARIA roles)
Use ES2015’s fetch()
Parse Hydra API doc to generate files
75.
76.
77.
78. The Stack
React, ES2015+, JSX
React Router: client-side routing library
Redux: extensible container to manage the states of the app
Redux Form: forms
Redux Thunk: async actions (AJAX requests)
Optional: Twitter Bootstrap
79. Other Skeletons
React Native: master branch (@mysiar)
TypeScript definitions: master branch (@soyuka)
Your preferred technology: Pull Requests very appreciated!
Angular: community (momenttech/lysis)
Vue.js: api-platform/client-generator#35 (@alOneh)
82. Kubernetes & Helm
K8S: « Production-Grade Container Orchestration », by Google
Powers Google Container Engine and Azure Container Service
Helm: official K8S package manager (like APT or Homebrew), by Microsoft
Free software
83. Deploy in the Cloud
A Helm chart is provided with API Platform
# …Build and push the Docker images…
# …Connect to your Kubernetes cluster…
$ helm install ./api/helm/api --name api
The project is deployed,
managed, and scale!