Контроль версий API — это пакет Reindert Vetter предназначен для элегантного управления версиями конечных точек API.
Этот пакет предоставляет файл конфигурации, в котором вы определяете выпуски и возможности версии.Позже вы можете использовать такие вещи, как операторы версии, чтобы определить возможности конкретных версий вашего API:
'releases' => [
'GET/orders' => [
'<=1.0' => [
PrepareParameterException::class,
],
],
'(POST|PUT)/orders' => [
'<=2.0' => [
ThrowCustomException::class,
ValidateZipCode::class,
],
'<=1.0' => [
PrepareParameterException::class,
],
],
],
Этот пакет имеет два способа управления версиями ваших конечных точек API: с использованием следующих методов:
- Version statement
- Version middleware
Операторы версии включают классы, которые смешиваются с трейтом VersionStatement
.Таким образом, вы можете определить, должен ли выполняться код API, не проверяя конкретную версию API везде в вашем коде:
// Instead of version checks everywhere...
if (RequestVersion::isAtLeast('2.0')) {
// ...
}
// A VersionStatement class instead based on version
if (ValidateZipCode::permitted()) {
// ...
}
Вот пример ValidateZipCode
из файла README:
namespace App\VersionControl\Orders;
use ReindertVetter\ApiVersionControl\Concerns\VersionStatement;
class ValidateZipCode
{
use VersionStatement;
}
Промежуточное программное обеспечение версии делает еще один шаг вперед, обрабатывая все запросы и ответы, отличные от последней версии в промежуточном программном обеспечении:
use Closure;
use Illuminate\Http\Request;
class PrepareParameterException
{
/**
* @param $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
// Set the default parameter because it is required in a newer version.
$request->query->set('sort', 'DESC');
/** @var \Illuminate\Http\Response $response */
$response = $next($request);
return $response;
}
}
Вы можете узнать больше об этом пакете, получить полные инструкции по установке и просмотреть исходный код на GitHub.< /p>