sf4/api

Simple rest API for Symfony 4


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

Simple rest API for Symfony 4

Structure

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/

Install

Via Composer

$ composer require Sf4/Api

Usage

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'

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CODE_OF_CONDUCT for details.

Security

If you discover any security related issues, please email siim.liimand@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.