3.1 KiB
Adding an endpoint to ExtendSchema
Table of contents
This document is intended for internal developers of the WooCommerce Blocks plugin. If you feel like a new endpoint should be added, feel free to open an issue or a PR detailing why.
Extending GET
endpoints in Store API
ExtendSchema needs to expose each endpoint individually. If you want to expose a new endpoint, you have to follow these steps:
- In
ExtendSchema
class, add your endpointIDENTIFIER
to the$endpoints
variable.
use Automattic\WooCommerce\StoreApi\Schemas\BillingAddressSchema;
private $endpoints = [ /* other identifiers */, BillingAddressSchema::IDENTIFIER ];
This is to prevent accidentally exposing new endpoints.
- Inside your endpoint schema class (for this example, inside
BillingAddressSchema
), in itsget_properties
method, add this call at the end of the returned array.
You can pass extra parameters to get_extended_schema
and those would be passed to third party code.
self::EXTENDING_KEY => $this->get_extended_schema( self::IDENTIFIER ),
EXTENDING_KEY
value is extensions
, we use a constant to make sure we don't have a typo.
- Inside the same class, in
get_item_response
, add the below line. Likeget_extended_schema
, you can pass extra parameters here as well.
Make sure to only expose what's needed.
self::EXTENDING_KEY => $this->get_extended_data( self::IDENTIFIER, $cart_item ),
That's it, your endpoint would now contain extensions
in your endpoint, and you can consume it in the frontend.
Extending a new endpoint is usually half the work, you will need to receive this data in the frontend and pass it to any other extensibility point (Slot, Filter, Event).
Use cases for adding new endpoints
Extending an existing schema
There might be a case when you want to extend an existing schema, for example, you want to add order_number
to the checkout endpoint. In Add order number to checkout schema we did that.
Adding a new schema
There might be a case when you want to add a new schema, for example, you need a new endpoint that do not exist in the Store API yet, e.g. wc/store/order
. In Add an endpoint for getting pay for order orders we did that.
We're hiring! Come work with us!
🐞 Found a mistake, or have a suggestion? Leave feedback about this document here.