The conference dedicated to API Platform and its ecosystem
API Platform's Philosophy
In 25 years of PHP, the web changed dramatically and is now evolving faster than ever:
- Thanks to awesome frontend technologies such as React or Vue.js, full-JavaScript Progressive Web Apps are becoming the standard.
- Internet users spend more time on their mobile devices than on desktops: having a mobile-first website is mandatory and native mobile apps are a must-have.
- The semantic web and especially Linked Data is a reality: with the Schema.org initiative and new open web standards such as JSON-LD, search engines (among a bunch of other services and software) consume structured and machine-readable data at web scale. Not exposing such data decrease interoperability and search engine ranking/efficiency (think rich snippets).
- HTTP/2 and HTTP/3 dramatically improve the performance of web applications thanks to multiplexing, Server Push and their other new capabilities.
PHP.net, Symfony, Facebook and many others have worked hard to improve and professionalize the PHP ecosystem. The PHP world has closed the gap with most backend solutions and is often more innovative and faster than them.
However in critical areas I've described previously, many things can be improved. Almost all existing solutions are still designed and documented to create websites the old way: a server generates then sends plain-old HTML documents to browsers.
API Platform is a set of tools for building modern web projects. It is a framework for API-first projects built on top of Symfony components. Like other modern frameworks such as Laravel and Symfony, it's both a full-stack all-in-one framework and a set of independent PHP components and bundles that can be used separately.
API Platform makes modern development easy and fun again:
- Start by creating a web API exposing structured data that can be understood by any compliant client such as your apps but also search engines (JSON-LD with Schema.org vocabulary). This API is the central and unique entry point to access and modify data. It also encapsulates the whole business logic.
- Then create as many clients as you want using frontend technologies you love: a JavaScript webapp built with React or with Vue querying the API but also a native iOS or Android app, or even a desktop application. Clients only display data and forms.
See also the general design of the framework.
What' new?

Sep 21,22 2023: new edition of our conference dedicated to API Platform and its ecosystem!
The Distribution: Create Powerful APIs with Ease
Core
- General Design Considerations
- GraphQL Support
- Enabling GraphQL
- Changing Location of the GraphQL Endpoint
- GraphiQL
- GraphQL Playground
- Modifying or Disabling the Default IDE
- Request with application/graphql Content-Type
- Operations
- Queries
- Mutations
- Subscriptions
- Workflow of the Resolvers
- Events
- Filters
- Pagination
- Security
- Serialization Groups
- Exception and Error
- Name Conversion
- Custom Types
- Modify the Extracted Types
- Changing the Serialization Context Dynamically
- Export the Schema in SDL
- Handling File Upload
- Change Default Descriptions
- State Providers
- Filters
- Doctrine ORM and MongoDB ODM Filters
- Elasticsearch Filters
- Serializer Filters
- Creating Custom Filters
- ApiFilter Attribute
- The Serialization Process
- Overall Process
- Available Serializers
- The Serialization Context, Groups and Relations
- Using Serialization Groups
- Using Serialization Groups per Operation
- Embedding Relations
- Property Normalization Context
- Calculated Field
- Changing the Serialization Context Dynamically
- Changing the Serialization Context on a Per-item Basis
- Name Conversion
- Decorating a Serializer and Adding Extra Data
- Entity Identifier Case
- Embedding the JSON-LD Context
- Collection Relation
- Validation
- Validating Submitted Data
- Using Validation Groups
- Using Validation Groups on Operations
- Dynamic Validation Groups
- Sequential Validation Groups
- Validating Delete Operations
- Error Levels and Payload Serialization
- Validation on Collection Relations
- Open Vocabulary Generated from Validation Metadata
- Specification Property Restrictions
- Collecting Denormalization Errors
- Overriding Default Order
- OpenAPI Specification Support (formerly Swagger)
- Using the OpenAPI Command
- Overriding the OpenAPI Specification
- Using the OpenAPI and Swagger Contexts
- Disabling an Operation From OpenAPI Documentation
- Changing the Name of a Definition
- Changing Operations in the OpenAPI Documentation
- Disabling Swagger UI or ReDoc
- Changing the Location of Swagger UI
- Using a custom Asset Package in Swagger UI
- Overriding the UI Template
- Compatibility Layer with Amazon API Gateway
- OAuth
- Info Object
- Pushing Related Resources Using HTTP/2
- Using External Vocabularies
- URL Generation Strategy
- NelmioApiDocBundle Integration
- Bootstraping the core library
Schema Generator
- Configuration
- Customizing PHP Namespaces
- Forcing a Field Type (Range)
- Forcing a Field Cardinality
- Changing the Default Cardinality
- Adding a Custom Attribute or Modifying a Generated Attribute
- Forcing (or Enabling) a Class Parent
- Forcing a Class to be Abstract
- Define API Platform Operations
- Forcing a Nullable Property
- Forcing a Unique Property
- Making a Property Read-Only
- Making a Property Write-Only
- Forcing an Embeddable Class to be Embedded
- Skipping Accessor Method Generation
- Using Fluent Mutator Methods
- Disabling the id Generator
- Generating UUIDs
- User-submitted UUIDs
- Generating Custom IDs
- Disabling Usage of Doctrine Collections
- Changing the Field Visibility
- Generating Assert\Type Attributes
- Forcing Doctrine Inheritance Mapping Attribute
- Interfaces and Doctrine Resolve Target Entity Listener
- Custom Schemas
- All Types, Resolve Types and Exclude
- Checking GoodRelation Compatibility
- Author PHPDoc
- PHP File Header
- Disabling Generators and Creating Custom Ones
- Full Configuration Reference