carsdotcom/laravel-json-schema
最新稳定版本:v2.3.0
Composer 安装命令:
composer require carsdotcom/laravel-json-schema
包简介
Json Schema validation for Laravel projects
README 文档
README
Use JsonSchema in Laravel apps
Purpose
This library builds on the outstanding JsonSchema validator opis/json-schema
The entire intent of this library is to make JsonSchema feel like a first class citizen in a Laravel project.
- Adds a new config file,
config/json-schema.php, to configure your root directory for self-hosted schema files. - Adds the
SchemaValidatorfacade that can be used to instantiate the validator with appropriate loaders. - Adds new PhpUnit assertions in the
Carsdotcom\JsonSchemaValidation\Traits\JsonSchemaAssertionstrait, such as validating that a mixed item validates for a specific schema. - Most interestingly, it lets you use JsonSchema to validate incoming Requests bodies, and/or validate your own outgoing response bodies, all using JsonSchema schemas that you can then export into OpenAPI documentation.
Laravel Version Compatibility
This package supports Laravel v9+.
Installation
composer require carsdotcom/laravel-json-schema
Using Laravel JSON Schema
Setup
Config File
Copy the json-schema.php file from the vendor/carsdotcom/laravel-json-schema/config folder to your application's config folder.
Schema Storage
- Create a
Schemasfolder under your application root folder, such asapp/Schemas. - Create a new storage disk under the
diskskey within your application'sconfig/filesystem.phpfile:
'disks' => [
'schemas' => [
'driver' => 'local',
'root' => app_path('app/Schemas'), // must match the 'config.json-schema.local_base_prefix' value
]
]
- Add your schema files to the
app/Schemasfolder. You may create subfolders to keep things organized.
Generate Enum Schemas
This is an optional step, but can be super helpful.
Note: Enums must be created either as a built-in PHP enum object or a MyCLabs\Enum\Enum class.
- Add
use Carsdotcom\JsonSchemaValidation\Traits\GeneratesSchemaTrait;to the declarations in the Enum. - Add a
SCHEMAconstant to the enum. It's value will be the relative path to your schema file, such as:const SCHEMA = '/Acme/Enums/item_type.json'; - Run the
schema:generateArtisan command.
Validating JSON Data Against a Schema
For this example, we'll be using these objects:
Hosted JSON Schema File
This is assumed to be stored in your app/Schemas folder as Product.json.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"productId": {
"description": "The unique identifier for a product",
"type": "integer"
},
"productName": {
"description": "Name of the product",
"type": "string"
},
"price": {
"description": "The price of the product",
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [ "productId", "productName", "price" ]
}
JSON Data to be Validated
{
"productId": 1,
"productName": "An ice sculpture",
"price": 12.50
}
Application Code for Validation
use Carsdotcom\JsonSchemaValidation\SchemaValidator;
SchemaValidator::validateOrThrow($json, 'Product.json');
Additional Functionality
Getting the Content of a Schema File
use Carsdotcom\JsonSchemaValidation\SchemaValidator;
SchemaValidator::getSchemaContents('Product.json');
Storing a Schema File at a Specific Location
use Carsdotcom\JsonSchemaValidation\SchemaValidator;
SchemaValidator::getSchemaContents('Customer.json', $jsonSchemaForCustomer);
Adding an In-Memory Schema File
$schemaKey = (new SchemaValidatorService)->registerRawSchema($jsonSchema);
统计信息
- 总下载量: 31.39k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 9
- 点击次数: 1
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-07-06