The API Platform Core Library
API Platform Core is an easy-to-use and powerful library to create hypermedia-driven REST APIs. It is a component of the API Platform framework. It can be used as a standalone or with the Symfony framework (recommended).
It embraces JSON for Linked Data (JSON-LD) and Hydra Core Vocabulary web standards but also supports HAL, Swagger/Open API, XML, JSON, CSV and YAML.
Build a working and fully featured CRUD API in minutes. Leverage the awesome features of the tool to develop complex and high-performance API-first projects.
If you are starting a new project, the easiest way to get API Platform up is to install the API Platform Distribution.
Features
Here is the fully featured REST API you'll get in minutes:
- Automatic CRUD
- Hypermedia (JSON-LD and HAL)
- Machine-readable documentation of the API in the Hydra and Swagger/Open API formats, guessed from PHPDoc, Serializer, Validator and Doctrine ORM / MongoDB ODM metadata
- Nice human-readable documentation built with Swagger UI (including a sandbox) and/or ReDoc
- Pagination
- A bunch of filters
- Ordering
- Validation using the Symfony Validator Component (with groups support)
- Advanced authentication and authorization rules
- Errors serialization (Hydra and the RFC 7807 are supported)
- Advanced serialization thanks to the Symfony Serializer Component (groups support, relation embedding, max depth...)
- Automatic routes registration
- Automatic entrypoint generation giving access to all resources
- JWT and OAuth support
- Files and
\DateTime
and serialization and deserialization
Everything is fully customizable through a powerful event system and strong OOP.
This bundle is extensively tested (unit and functional). The Fixtures/
directory contains a working app covering all features of the library.
Screencasts
The easiest and funniest way to learn how to use API Platform is to watch the more than 60 screencasts available on SymfonyCasts!
The Distribution: Create Powerful APIs with Ease
The API Component
- 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
- Filters
- Doctrine ORM and MongoDB ODM Filters
- Elasticsearch Filters
- Serializer Filters
- Creating Custom Filters
- ApiFilter Annotation
- The Serialization Process
- Overall Process
- Available Serializers
- The Serialization Context, Groups and Relations
- Using Serialization Groups
- Using Serialization Groups per Operation
- Embedding Relations
- 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
- Overriding Default Order
- OpenAPI Specification Support (formerly Swagger)
- Using the OpenAPI Command
- Overriding the OpenAPI Specification
- Using the OpenAPI and Swagger Contexts
- Changing the Name of a Definition
- Changing Operations in the OpenAPI Documentation
- 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
- NelmioApiDocBundle Integration
- Bootstraping the core library
- Configuration
The Schema Generator Component
- Configuration
- Customizing PHP Namespaces
- Forcing a Field Range
- Forcing a Field Cardinality
- Forcing a Relation Table Name
- Forcing (or Disabling) a Class Parent
- Forcing a Class to be Abstract
- Forcing a Nullable Property
- Forcing a Unique Property
- Making a Property Read-Only
- Making a Property Write-Only
- Forcing a Property to be in a Serialization Group
- Forcing an Embeddable Class to be Embedded
- Author PHPDoc
- Disabling Generators and Creating Custom Ones
- Skipping Accessor Method Generation
- Disabling the id Generator
- Generating UUIDs
- User submitted UUIDs
- Generating Custom IDs
- Disabling Usage of Doctrine Collections
- Changing the Field Visibility
- Generating @Assert\Type Annotations
- Forcing Doctrine Inheritance Mapping Annotation
- Interfaces and Doctrine Resolve Target Entity Listener
- Custom Schemas
- Checking GoodRelation Compatibility
- PHP File Header
- Full Configuration Reference