shopware/frontends - api-client
Dynamic and fully typed API Client for Shopware 6. Usable in any JavaScript and TypeScript project.
You can use types generated from your custom API instance to have autocompletion and type safety.
Setup
Install npm package:
pnpm add @shopware/api-client
yarn add @shopware/api-client
npm i @shopware/api-client
Recommended practice is to create a separate module file. For example src/apiClient.ts
, and import it whenever you need to use API Client.
import { createAPIClient } from "@shopware/api-client";
import type {
operationPaths,
operations,
components,
} from "@shopware/api-client/api-types";
import type {
operationPaths,
operations,
components,
} from "@shopware/api-client/api-types/apiTypes-6.4.20.0";
import { operationPaths, operations, components } from "./apiTypes";
import Cookies from "js-cookie";
export const apiClient = createAPIClient<operations, operationPaths>({
baseURL: "https://demo-frontends.shopware.store/store-api",
accessToken: "SWSCBHFSNTVMAWNZDNFKSHLAYW",
contextToken: Cookies.get("sw-context-token"),
onContextChanged(newContextToken) {
Cookies.set("sw-context-token", newContextToken, {
expires: 365,
path: "/",
sameSite: "lax",
});
},
});
export type ApiSchemas = components["schemas"];
export type ApiRequestParams<OPERATION_NAME extends keyof operations> =
RequestParameters<OPERATION_NAME, operations>;
export type ApiReturnType<OPERATION_NAME extends keyof operations> =
RequestReturnType<OPERATION_NAME, operations>;
Admin API client setup
The setup works the same way as creteAPIClient
function, with few differences:
import { createAdminAPIClient } from "@shopware/api-client";
import {
RequestParameters,
RequestReturnType,
createAdminAPIClient,
} from "@shopware/api-client";
import type {
operationPaths,
operations,
components,
} from "@shopware/api-client/admin-api-types";
import Cookies from "js-cookie";
export const adminApiClient = createAdminAPIClient<operations, operationPaths>({
baseURL: "https://demo-frontends.shopware.store/api",
sessionData: JSON.parse(Cookies.get("sw-admin-session-data") || "{}"),
onAuthChange(sessionData) {
Cookies.set("sw-admin-session-data", JSON.stringify(sessionData), {
expires: 1,
path: "/",
sameSite: "lax",
});
},
});
export type AdminApiSchemas = components["schemas"];
export type AdminApiRequestParams<OPERATION_NAME extends keyof operations> =
RequestParameters<OPERATION_NAME, operations>;
export type AdminApiReturnType<OPERATION_NAME extends keyof operations> =
RequestReturnType<OPERATION_NAME, operations>;
the rest works the same as store-api client.
Basic usage
Take a look at example project using API Client.
Simple invocation
import { apiClient, ApiReturnType } from "./apiClient";
let productsResponse: ApiReturnType<"readProduct">;
async function loadProducts() {
productsResponse = await apiClient.invoke("readProduct post /product", {
limit: 2,
});
}
Predefining methods
If you prefer to add another layer of abstraction you can use created previously types to define your own concept of methods.
const readNavigation = (params: ApiRequestParams<"readNavigation">) =>
apiClient.invoke(
"readNavigation post /navigation/{activeId}/{rootId} sw-include-seo-urls",
{
depth: 2,
...params,
},
);
import { readNavigation } from "./apiClient";
async function loadMainNavigation() {
const navigation = await readNavigation({
activeId: "main-navigation",
rootId: "main-navigation",
});
}
Error handling
Client is throwing ApiClientError
with detailed information returned from the API. It will display clear message in the console or you can access details
property to get raw information from the response.
import { ApiClientError } from "@shopware/api-client";
try {
} catch (error) {
if (error instanceof ApiClientError) {
console.error(error);
console.error("Details:", error.details);
} else {
console.error("==>", error);
}
}
Links
Changelog
Full changelog for stable version is available here
Latest changes: 0.0.0-canary-20240111112807
Patch Changes