# Components

The Components builder can define reusable OpenAPI components in one object. Each collection method accepts package builders, not raw arrays.

use Vyuldashev\LaravelOpenApi\Builders\Callback;
use Vyuldashev\LaravelOpenApi\Builders\Components;
use Vyuldashev\LaravelOpenApi\Builders\Example;
use Vyuldashev\LaravelOpenApi\Builders\Header;
use Vyuldashev\LaravelOpenApi\Builders\Link;
use Vyuldashev\LaravelOpenApi\Builders\MediaType;
use Vyuldashev\LaravelOpenApi\Builders\Operation;
use Vyuldashev\LaravelOpenApi\Builders\Parameter;
use Vyuldashev\LaravelOpenApi\Builders\PathItem;
use Vyuldashev\LaravelOpenApi\Builders\RequestBody;
use Vyuldashev\LaravelOpenApi\Builders\Response;
use Vyuldashev\LaravelOpenApi\Builders\Schema;
use Vyuldashev\LaravelOpenApi\Builders\SecurityScheme;

return Components::create()
    ->schemas(Schema::object('Pet'))
    ->responses(Response::create('Error')->description('Error'))
    ->parameters(Parameter::path('petId')->name('petId'))
    ->examples(Example::create('PetExample')->value(['id' => 1]))
    ->requestBodies(
        RequestBody::create('CreatePet')->content(
            MediaType::json()->schema(Schema::ref('#/components/schemas/Pet')),
        ),
    )
    ->headers(Header::create('X-Trace')->schema(Schema::string()))
    ->securitySchemes(
        SecurityScheme::create('Bearer')
            ->type(SecurityScheme::TYPE_HTTP)
            ->scheme('bearer'),
    )
    ->links(Link::create('PetLink')->operationRef('#/paths/~1pets~1{id}/get'))
    ->callbacks(
        Callback::create('PetCallback')->expression(
            '{$request.body#/callbackUrl}',
            PathItem::create()->post(Operation::post()->responses(Response::ok())),
        ),
    );

Available methods:

Method Accepted builders
schemas() Schema
responses() Response
parameters() Parameter
examples() Example
requestBodies() RequestBody
headers() Header
securitySchemes() SecurityScheme
links() Link
callbacks() Callback