# Callbacks
Generate a callback factory:
php artisan openapi:make-callback MyEvent
A callback factory returns a Callback builder:
use Vyuldashev\LaravelOpenApi\Builders\Callback;
use Vyuldashev\LaravelOpenApi\Builders\MediaType;
use Vyuldashev\LaravelOpenApi\Builders\Operation;
use Vyuldashev\LaravelOpenApi\Builders\PathItem;
use Vyuldashev\LaravelOpenApi\Builders\RequestBody;
use Vyuldashev\LaravelOpenApi\Builders\Response;
use Vyuldashev\LaravelOpenApi\Builders\Schema;
use Vyuldashev\LaravelOpenApi\Factories\CallbackFactory;
class MyEventCallback extends CallbackFactory
{
public function build(): Callback
{
return Callback::create('MyEvent')
->expression(
'{$request.body#/callbackUrl}',
PathItem::create()->post(
Operation::post()
->requestBody(
RequestBody::create()->content(
MediaType::json()->schema(
Schema::object()->properties(
Schema::string('foo'),
),
),
),
)
->responses(
Response::ok()->description('Callback accepted'),
),
),
);
}
}
Callback::expression() accepts a callback expression and a package PathItem builder. The PathItem contains the operation the remote server should expose.
# Reusable Callbacks
Add Vyuldashev\LaravelOpenApi\Contracts\Reusable to put a callback under components.callbacks and reference it from operations:
use Vyuldashev\LaravelOpenApi\Contracts\Reusable;
class MyEventCallback extends CallbackFactory implements Reusable
{
public function build(): Callback
{
return Callback::create('MyEvent')
->expression('{$request.body#/callbackUrl}', PathItem::create()->post(
Operation::post()->responses(Response::ok()),
));
}
}
Use CallbackFactory::ref() when you need a callback reference.