auto1-oss / service-api-handler-bundle
Auto1 Service API Handler Bundle for creating micro-services with PHP
Installs: 52 649
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 6
Forks: 9
Open Issues: 0
Type:auto1-bundle
Requires
- php: >=7.1
- auto1-oss/service-api-components-bundle: ^1.0
- auto1-oss/service-api-request: ^1.0
- monolog/monolog: ~1.22
- symfony/config: ~3.0|~4.0|~5.0|~6.0
- symfony/dependency-injection: ~3.0|~4.0|~5.0|~6.0
- symfony/http-foundation: ~3.0|~4.0|~5.0|~6.0
- symfony/http-kernel: ~3.0|~4.0|~5.0|~6.0
- symfony/monolog-bridge: ~3.0|~4.0|~5.0|~6.0
- symfony/property-info: ^3.4.2|~4.0|~5.0|~6.0
- symfony/routing: ~4.1|~5.0|~6.0
- symfony/serializer: ~3.0|~4.0|~5.0|~6.0
- symfony/yaml: ~3.0|~4.0|~5.0|~6.0
Requires (Dev)
- phpspec/prophecy: ^1.7.2
- phpunit/phpunit: ^7.5|^8.0
- symfony/console: ~3.0|~4.0|~5.0|~6.0
Suggests
- nelmio/api-doc-bundle: For Generating API documentations
README
Register required Bundles:
Auto1\ServiceAPIComponentsBundle\Auto1ServiceAPIComponentsBundle::class => ['all' => true], Auto1\ServiceAPIHandlerBundle\Auto1ServiceAPIHandlerBundle::class => ['all' => true],
config/routing.yml
endpoints: resource: "@Auto1ServiceAPIHandlerBundle/Resources/config/routing.yml"
Description
Use Endpoints specifications to handle symfony request flow.
Prepares RequestDTO
from $_GLOBALS
and serializes response from ServiceResponse(ResponseDTO, HTTP_CODE)
Controller
- Controllers must be tagged with
controller.service_arguments
and suffixed withController
- Action methods must be suffixed with
Action
ServiceResponse
- Fully imitates, but not implements behaviour of
HttpFoundation\Response
(JsonResponse) - Agnostic to the response format, and performs serialization after being returned from the controller
Example of EP definition (yaml):
# CarLead getCarLeadByVin: method: 'GET' baseUrl: '%auto1.api.url%' path: '/v1/carlead/vin/{vin}' requestClass: 'Auto1\ServiceDTOCollection\CarLead\CarLeadRead\Request\GetCarLeadByVinRequest' responseClass: 'Auto1\ServiceDTOCollection\CarLead\CarLeadRead\Response\CarLead'
Example of ServiceRequest implementation:
class GetCarLeadByVinRequest implements ServiceRequestInterface { private $vin; public function setVin(string $vin): self { $this->vin = $vin; return $this; } public function getVin() { return $this->vin; } }
Example of EP implementation:
use Auto1\ServiceAPIHandlerBundle\Response\ServiceResponse; use Auto1\ServiceDTOCollection\CarLead\CarLeadRead\Request\GetCarLeadByVinRequest; use Auto1\ServiceDTOCollection\CarLead\CarLeadRead\Response\CarLead; class MyController { public function carLeadByVinAction(GetCarLeadByVinRequest $carLeadRequestDTO): ServiceResponse { /** @var CarLead $carLead */ $carLead = $this->...->find($carLeadRequestDTO->getVin()); return new ServiceResponse( $carLead, 200 ); } }
Swagger generation
For symfony:>=6.0
and nelmio/api-doc-bundle:>=4.0
swagger json file is generated in OpenApi v3 format "openapi": "3.0.0"
.
For previous versions of symfony
and nelmio/api-doc-bundle
swagger json file is generated in Swagger V2 format "swagger": "2.0"
.
Debug
bin/console c:c && bin/console debug:router --show-controllers
For more info - have a look at service-api-components-bundle usage: