nucleardog / ndapi-routing
API boilerplate for Laravel - routing
Requires
- php: ^8.2
- illuminate/collections: ^11.0
- illuminate/http: ^11.0
- illuminate/routing: ^11.0
- illuminate/support: ^11.0
- nucleardog/discovery: ^1.0
- nucleardog/ndapi-common: ^1.0
This package is auto-updated.
Last update: 2024-12-25 01:07:28 UTC
README
Part of the ndapi package. Provides discovery of routes and API versioning.
Usage
Registering Routes
Any class that implements the Nucleardog\Api\Contracts\Routing\RegistersRoutes
interface will have its routes()
method called to allow it to register
additional routes dynamically at runtime.
Versioning
The Laravel router is replaced at runtime with one which supports matching on
additional properties, namely a version
property.
A route matcher is included and enabled by default which matches the version
specified in the HTTP Accept
header to routes based on the version specified
on the routes.
The end result is you can register routes with a version specified:
<?php
Route::version('v1')->get('/test', fn() => 'test v1');
Route::version('v2')->get('/test', fn() => 'test v2');
And the matched route will depend on the version specified in the request:
$ curl -H 'Accept: application/json;version=v1' http://localhost:8000/test
test v1
$ curl -H 'Accept: application/json;version=v2' http://localhost:8000/test
test v2
This works with all the normal constructs you use when defining routes (e.g.,
Route::version('v1')->group(...);
).
Tests
Phpunit is included in a separate composer file and must be explicitly installed:
$ cd tools/phpunit/
$ composer install
Once installed, the tests can be run from the root package folder with:
$ composer test
Legal
Copyright 2024 Adam Pippin hello@adampippin.ca
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.