# Compliance
The relevant parts of the specification used for Lodata are linked in the navigation bar under OData Specification.
Lodata supports many sections of the OData specification, these are the major areas of support:
- Publishing a service document (opens new window) at the service root
- Publishing a metadata document (opens new window) in both JSON (opens new window) and XML (opens new window) formats
- Publishing an OpenAPI specification document (opens new window) at the service root
- Adding custom annotations (opens new window)
- Strict type model for primitive types, supporting Eloquent casts and getter/setters
- Returning data according to the OData-JSON (opens new window) specification
- Streaming JSON (opens new window) support
- Using server-driven-pagination (opens new window) when returning partial results
- The $expand (opens new window) system query option
- The $select (opens new window) system query option
- The $orderby (opens new window) system query option, including multiple orders on individual properties
- The $top (opens new window) system query option
- The $skip (opens new window) system query option
- The $count (opens new window) system query option
- The $search (opens new window) system query option
- The $value (opens new window) path segment
- The $filter (opens new window) system query option, with all expressions, functions, operators, and supports query parameter aliases
- The $index (opens new window) system query option
- The $compute (opens new window) system query option
- Asynchronous requests (opens new window) using Laravel jobs, with monitoring, cancellation and callbacks
- Batch requests (opens new window) in both multipart and JSON formats, including entity back-references and asynchronous batch requests
- Deep insert (opens new window) support at any depth
- Deep update (opens new window) support at any depth
- Resolving (opens new window) entity IDs into representations
- Stream (opens new window) properties in the payload and via read links
- Edit (opens new window) links, and POST/PATCH/DELETE requests for new or existing entities
- Use of ETags (opens new window) for avoiding update conflicts
- Lambda (opens new window) operators
any
andall
- Composable URLs (opens new window)
- Declared (opens new window) and navigation (opens new window) properties
- Referential constraints (opens new window)
- Entity singletons (opens new window)
- Key as segment convention (opens new window)
- Passing query options in the request body (opens new window)
- Upsert requests (opens new window)
- Database transactions (opens new window)
- Requesting entity references (opens new window)
- IEEE754 (opens new window) number-as-string support
- Primitive literals (opens new window) including duration and enumeration in URLs.
- Enumeration types (opens new window)
- Collection properties (opens new window)
- Full, minimal and no metadata (opens new window) requests
- Function and Action operations (opens new window), including bound operations and inline parameters
- Addressing All Entities (opens new window) in a service
- Automatic discovery of PDO or Eloquent model tables, and relationships between Eloquent models
- All database backends that Laravel supports (MySQL, PostgreSQL, SQLite and Microsoft SQL Server) including all possible
$filter
expressions - Automatic discovery of OData feeds by PowerBI (using PBIDS (opens new window)) and Excel (using ODCFF (opens new window))
- Custom entity type, primitive type and entity set support
- Extensible driver model enabling the integration of data stores such as Redis, local files and third party REST APIs.