Document Glue API endpoints
Edit on GitHubThis document shows Document Glue API endpoints.
You can enhance your resource’s description in the OPENAPI v3 schema.
To generate the documentation, use the following command:
vendor/bin/glue api:generate:documentation
By default, this command generates the documentation for all the configured applications.
To select the application, you can pass the optional parameter application
:
vendor/bin/glue api:generate:documentation [--application=storefront|backend]
You can describe your resources in the Glue doc-comment annotation on the relevant controller actions:
Controller
/**
* @Glue({
* "post": {
* "summary": [
* "Retrieves resource by id."
* ],
* "parameters": [{
* "ref": "acceptLanguage"
* }],
* "responses": {
* "200": "Resource found.",
* "422": "Unprocessable entity."
* },
* "responseAttributesClassName": "Generated\\Shared\\Transfer\\ResourcesAttributesTransfer",
* "requestAttributesClassName": "Generated\\Shared\\Transfer\\RequestAttributesTransfer",
* }
* })
*
* @param \Generated\Shared\Transfer\RequestAttributesTransfer $requestAttributesTransfer
* @param \Generated\Shared\Transfer\GlueRequestTransfer $glueRequestTransfer
*
* @return \Generated\Shared\Transfer\GlueResponseTransfer
*/
public function postAction(RequestAttributesTransfer $requestAttributesTransfer, GlueRequestTransfer $glueRequestTransfer): GlueResponseTransfer
{
}
/**
* @Glue({
* "getResourceById": {
* ...
* },
* "getCollection": {
* ...
* }
* })
*
* @param \Generated\Shared\Transfer\GlueRequestTransfer $glueRequestTransfer
*
* @return \Generated\Shared\Transfer\GlueResponseTransfer
*/
Glue annotation must be in a valid JSON format.
You can define a Glue annotation on each action in the controller. You can define two annotations on the get
action so they have separate descriptions for getting collections and for getting resources by ID actions. Possible top-level keys are: getResourceById, getCollection, post, patch, and delete.
isIdNullable
is false by default but can be defined as true for the cases like /catalog-search
or /url-resolver
.
Always describe all the possible error statuses that your resource can return in responses
. If the status is used for several errors, you can use the most generic description for all of them—for example, "422": "Unprocessable entity."
.
To describe request body structure in the schema, you can use additional transfer properties attributes:
request_attributes.transfer.xml
<?xml version="1.0"?>
<transfers xmlns="spryker:transfer-01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="spryker:transfer-01 http://static.spryker.com/transfer-01.xsd">
<transfer name="RequestAttributes">
<property name="sku" type="string" restRequestParameter="required"/>
<property name="quantity" type="int" restRequestParameter="required"/>
<property name="productOptions" type="string[]" restRequestParameter="yes"/>
<property name="createdAt" type="string"/>
</transfer>
In the preceding example, sku
and quantity
are added to the request schema as required, productOptions
are added as optional, and createdAt
skipped. For the request schema to be generated, there must be at least one attribute on the transfer with not empty restRequestParameter
.
When creating a resource available as a relationship only and without its own resource route, you need to describe the structure of your resource attributes in a Glue annotation on ResourceRelationshipPlugin
:
PaymentMethodsByCheckoutDataResourceRelationshipPlugin
/**
* @Glue({
* "resourceAttributesClassName": "\\Generated\\Shared\\Transfer\\RestPaymentMethodsAttributesTransfer"
* })
*
* @method \Spryker\Glue\PaymentsRestApi\PaymentsRestApiFactory getFactory()
*/
class PaymentMethodsByCheckoutDataResourceRelationshipPlugin extends AbstractPlugin implements ResourceRelationshipPluginInterface
{
Always check the schema your resources are described with before releasing your resource.
The following table lists descriptions of the properties you can use in the annotations:
PROPERTY | DESCRIPTION |
---|---|
deprecated |
The path is marked deprecated. |
responseAttributesClassName |
Transfer is used as a representation of the response attributes. |
requestAttributesClassName |
Transfer is used as a representation of the request attributes. (refers to requests that have a request body) |
isIdNullable |
The JSON:API response id is null. |
path |
The resource is available on the path. This property can be used if the type+id is not the path the resource uses. |
summary |
The path’s summary that briefly describes what the endpoint does. |
parameters |
A list of parameters the endpoint accepts. |
isEmptyResponse |
The flag used to mark an endpoint that returns empty responses. |
responses |
A list of possible responses of the endpoint. The object must contain key-value pairs with HTTP codes as key, and a description as the value. |
Extending the behavior
The following interfaces can be used to add more data to the generated documentation.
- The
Spryker\Glue\DocumentationGeneratorApiExtension\Dependency\PluginApiApplicationProviderPluginInterface
interface: Adds a new application for which documentation will get generated, for example:\Spryker\Glue\GlueStorefrontApiApplication\Plugin\DocumentationGeneratorApi\StorefrontApiApplicationProviderPlugin
. - The
Spryker\Glue\DocumentationGeneratorApiExtension\Dependency\Plugin\ContextExpanderPluginInterface
interface: Adds information to the documentation generation context, for example:\Spryker\Glue\DocumentationGeneratorOpenApi\Plugin\DocumentationGeneratorApi\ControllerAnnotationsContextExpanderPlugin
. - The
Spryker\Glue\DocumentationGeneratorApiExtension\Dependency\Plugin\SchemaFormatterPluginInterface
interface: Formats the part of the documentation and must return an array of data ready for getting converted to YAML, for example:\Spryker\Glue\DocumentationGeneratorOpenApi\Plugin\DocumentationGeneratorApi\DocumentationGeneratorOpenApiSchemaFormatterPlugin
.
Thank you!
For submitting the form