Eloquent: API Resources vs Fractal

both of them are created for one job but their solutions are different in many ways.

Relationships:

in fractal you can easily add related models to the response. also, you can control when the related models should be presented in the response . (default include vs Available include)

for example your client can use ?include=rate to get the rate model from an article when needed! consider that, the fractal will eager load your relationships when you forgot to load it.

in API Resources you have no control over relationships and you should decide to have relationship or not in the first place. otherwise, if you forgot to eager load data for it, it will cost you too many queries to load related model (1+n problem).

Serializer

in basic usage of api resource you have no control on how data will map to final response.

for example if you want jsonnapi specification for your responses, you should manage all of the works by yourself. but in fractal you have it in the first place.

as a conclusion i recommend you to use fractal in this case. (or use dingo package for api but consider complexity of dingo !!)


Both are used to transform API json responses to standardise the response structure.

However, API resources is inbuilt in Laravel and it's very easy to use. Fractal was the preferred way to go when API resources were not in-build in Laravel. Fractal has some methods which make it little extensive as compared to API resources.

But if you consider the core functionality, both are same with different syntactical sugar.

Most of the things which were in fractal, you can do natively in Laravel now. Plus API resources eliminate the need of any extra installation and setup. The nomenclature is very easy in API resources to start with