Zum Hauptinhalt springen

HTTP Client

Mit fest hinterlegten Daten wirst du vermutlich nicht zum Ziel kommen. Um andere Systeme per HTTP anzusprechen, musst du den SodaSync HttpClient verwenden. In diesem Beispiel wird eine Dummy API angebunden.

 import {Integration, OrderProvider, QueryOrdersRequest, QueryOrdersResult} from "@soda-sync/app-sdk";

+type FakeProduct = {id: number, title: string, price: number, quantity: number};
+type FakeOrder = {
+ id: number,
+ products: FakeProduct[],
+ total: number,
+ discountedTotal: number,
+ userId: number,
+};
+
export class MyIntegration implements Integration, OrderProvider {
public checkConfiguration(): Promise<void> {
return Promise.resolve();
}

public async queryOrders(request: QueryOrdersRequest): Promise<QueryOrdersResult> {
+ const result = await SodaSync.http.request("GET", "https://dummyjson.com/carts");
+ const orders: FakeOrder[] = JSON.parse(result.body!).carts;
return {
pageSize: request.pageSize,
pageToken: request.pageToken,
nextPageToken: "123",
- data: [
- {
- id: "fwg4adftwsgb",
- orderNumber: "ORD#123",
- orderDate: "2023-06-02 21:45:00",
- status: "OPEN",
- items: [
- {
- id: "s3ilguasd",
- sku: "A12",
- name: "Eine Bestellposition",
- description: "Beschreibung der Position",
- amount: 1,
- singleNetPrice: {value: 10_00, divisor: 100},
- singleGrossPrice: {value: 11_90, divisor: 100},
- taxRate: 19,
- },
- ],
- shipments: [],
- transactions: [],
- },
- ],
+ data: orders.map(order => ({
+ id: order.id.toString(),
+ orderNumber: order.id.toString(),
+ orderDate: new Date().toISOString(),
+ status: "OPEN",
+ items: order.products.map(product => ({
+ id: product.id.toString(),
+ name: product.title,
+ amount: 1,
+ singleNetPrice: {value: product.price * 100, divisor: 100},
+ singleGrossPrice: {value: product.price * 100, divisor: 100},
+ taxRate: 0,
+ })),
+ shipments: [],
+ transactions: [],
+ })),
};
}

}

Wenn du nun die Testseite wieder aufrufst, erhältst du eine Fehlermeldung.

Fehler

Forbidden call to GET https://dummyjson.com/carts

Das liegt an einem Sicherheitskonzept von SodaSync, welches verhindert, dass Apps auf jede beliebige URL zugreifen können. Damit der Zugriff erfolgen kann, musst du die URL als regulären Ausdruck "registrieren".

 // src/index.ts
import {AppVersion, SdkVersion} from "@soda-sync/app-sdk";
import {MyIntegration} from "./my-integration";

export function factory() {
return new MyIntegration();
}

declare const __VERSION__: AppVersion;

SodaSync.registerApp({
sdkVersion: SdkVersion,
name: "Meine App",
packageId: "com.example.my_app",
description: "Meine tolle App",
version: __VERSION__,
author: {
name: "Max Muster",
email: "support@muster.tld",
},
supportedFeatures: ["orders-provide"],
+ accessedUrls: [
+ /https:\/\/dummyjson\.com\/.+/
+ ],
factory,
});

Wenn du nun noch einmal die Testseite aufrufst, wirst du die Daten von der API sehen.