Simple rest API for Symfony 4
If any of the following are applicable to your project, then the directory structure should follow industry best practices by being named the following.
bin/
config/
src/
tests/
vendor/
Via Composer
$ composer require Sf4/Api
config/routes.yaml
api_default:
path: /
methods: [GET, OPTIONS]
api_site:
path: /site/{token}
methods: [GET, OPTIONS]
config/services.yaml
services:
parameters:
# ...
api_token: '%env(resolve:API_TOKEN)%'
# ...
Sf4\Api\Services\TagAwareCacheAdapter: ~
Sf4\Api\Services\CacheAdapterInterface: '@Sf4\Api\Services\TagAwareCacheAdapter'
Sf4\Api\Repository\RepositoryFactory:
class: Sf4\Api\Repository\RepositoryFactory
arguments:
$entityManager: '@Doctrine\ORM\EntityManagerInterface'
$entities: []
Sf4\Api\EventSubscriber\RequestSubscriber: ~
Sf4\Api\RequestHandler\RequestHandlerInterface:
class: Sf4\Api\RequestHandler\RequestHandler
calls:
- method: setEntityManager
arguments:
- '@Doctrine\ORM\EntityManagerInterface'
- method: setTranslator
arguments:
- '@Symfony\Component\Translation\TranslatorInterface'
- method: setDispatcher
arguments:
- '@Symfony\Component\EventDispatcher\EventDispatcherInterface'
- method: setRepositoryFactory
arguments:
- '@Sf4\Api\Repository\RepositoryFactory'
- method: setCacheAdapter
arguments:
- '@Sf4\Api\Services\CacheAdapterInterface'
- method: setSites
arguments:
-
- { site: 'parent', url: null, token: null }
# - { site: 'parent', url: 'parent.example.com', token: 'API_TOKEN' }
# - { site: 'example', url: 'site.example.com', token: 'API_TOKEN' }
- method: setAvailableRoutes
arguments:
- api_default: 'Sf4\Api\Request\DefaultRequest'
api_site: 'Sf4\Api\Request\SiteRequest'
config/packages/translation.yaml
framework:
# ...
translator:
# ...
paths:
# ...
- '%kernel.project_dir%/vendor/sf4/api/src/translations'
$ composer test
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.