Add functionality for work with resources in you application and serialize this resources to any formats.
Support formats:
- PHP 7.4 or higher
Add Resource package in your composer.json:
{
"require": {
"fivelab/resource": "~2.0"
}
}Now tell composer to download the library by running the command:
php composer.phar update fivelab/resourceMore web applications use API (Application Programming Interface) with difference result structures. It's difficult
for developers and clients (who use this API) because each developer can return any data (JSON or XML).
And in more cases, applications does not support media types and return JSON data with any Content-Type header.
And in most cases, developers use real entities from database for map to JSON (as an example symfony/serializer).
This work funny, because one entity in backend application can representation to many resources for clients. As an example:
we have User entity with more data. If user authorized, we must return all data, but if user not logged, we must
return less data (id and avatar as an example). Yes, more people speak what we have a group system,
but what will happen if I say that we should have more than 100 groups? Yes, in large application it's real case.
In this library we try to resolve all issue related with API.
Note: we don't speak -
API, we must speak -Resource, because all operations (create, edit, delete, etc...) are performed on one resource (Blogas an example).
- Full isolate between model in database and resource for representation.
Model from database convert to resource via
Assembler.Blog -> Assembler -> BlogResource. By this we can create any resources for one model in database. (ForBlogas example:BlogResoure,PremiumBlogResoure,HotBlogResource, etc...). We don't use group system for separate, we have a separate assembler for each resource. - We full support media type (
Content-Type/Accept). If client acceptjson, we returnjson, if client acceptxml, we returnxml(but previously we must configure it ;) ). And - one resource, many formats ;)
Note: in our library we use
symfony/serializerwith custom normalizers and additional functionality. As result, all you custom normalizers/denormaizers will be normal work with our library.
This library is under the MIT license. See the complete license in library
LICENSE
For easy development you can use our Dockerfile:
docker build -t fivelab-resource .
docker run -it -v $(pwd):/code fivelab-resource bashAfter run docker container, please install vendors:
composer installIssues and feature requests are tracked in the Github issue tracker.
Thanks to everyone participating in the development of this Resource library!