Kontrola wersji API to pakiet od Reindert Vetter przeznaczony do eleganckiego zarządzania wersjami punktów końcowych API.
Ten pakiet zawiera plik konfiguracyjny, w którym definiujesz wydania i możliwości wersji.Później możesz użyć takich rzeczy, jak instrukcje wersji, aby określić możliwości określonych wersji Twojego interfejsu API:
'releases' => [
'GET/orders' => [
'<=1.0' => [
PrepareParameterException::class,
],
],
'(POST|PUT)/orders' => [
'<=2.0' => [
ThrowCustomException::class,
ValidateZipCode::class,
],
'<=1.0' => [
PrepareParameterException::class,
],
],
],
Ten pakiet ma dwa sposoby zarządzania wersjami punktów końcowych interfejsu API, przy użyciu następujących technik:
- Version statement
- Version middleware
Instrukcje wersji zawierają klasy, które mieszają się z cechą VersionStatement
.W ten sposób możesz określić, czy kod API ma być wykonywany bez sprawdzania konkretnej wersji API w całym kodzie:
// Instead of version checks everywhere...
if (RequestVersion::isAtLeast('2.0')) {
// ...
}
// A VersionStatement class instead based on version
if (ValidateZipCode::permitted()) {
// ...
}
Oto przykład ValidateZipCode
z pliku README:
namespace App\VersionControl\Orders;
use ReindertVetter\ApiVersionControl\Concerns\VersionStatement;
class ValidateZipCode
{
use VersionStatement;
}
Oprogramowanie pośredniczące w wersji idzie o krok dalej, przetwarzając wszystkie żądania i odpowiedzi inne niż najnowsza wersja w oprogramowaniu pośredniczącym:
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;
}
}
Możesz dowiedzieć się więcej o tym pakiecie, uzyskać pełne instrukcje instalacji i wyświetlić kod źródłowy na GitHub.< /p>