מציגים את ערכות ה-SDK של SupDesk

SupDesk Team

כל מוצר רציני מוצא את עצמו כותב שכבת אינטגרציה — סקריפט שקורא מתיבת דואר נכנס, עבודת cron שמסנכרנת לוח, אנדפוינט שמגיש משוב מה-UI של עצמכם. קונסולת SupDesk מצוינת כשאתם ליד המקלדת. ברגע שבו אתם רוצים לבצע אוטומציה, אתם צריכים API — ו-API טוב רק כמו הקליינטים שדרכם מדברים איתו.

היום אנחנו משחררים ארבעה מהם.

הכירו את ערכות ה-SDK

  • JavaScript / TypeScriptsupdesk ב-npm. רץ ללא שינוי ב-Node 18+, ב-Deno, ב-Bun וב-Cloudflare Workers, עם אפס תלויות ריצה.
  • Pythonsupdesk ב-PyPI. קליינט SupDesk סינכרוני אחד וקליינט AsyncSupDesk אסינכרוני אחד, החולקים ליבת httpx אחת.
  • Gogithub.com/rabinapps/supdesk-go. רק ספריית התקן, כך שהוא נבנה בכל מקום שבו Go 1.23+ רץ — כולל Cloudflare Workers באמצעות GOOS=wasip1.
  • Dartsupdesk ב-pub.dev. בנוי על dio, כך ש-interceptors, CancelToken ומתאמי proxy פועלים כפי שאתם כבר מצפים.

התקנה

npm install supdesk
pip install supdesk
go get github.com/rabinapps/supdesk-go
dependencies:
  supdesk: ^0.1.0

API אחד, ארבע שפות

ערכות ה-SDK אינן ארבעה עטיפים נפרדים; הן אותו API עם אותה סמנטיקה בכל שפה. אם תוכלו לקרוא הגשות באחת מהן, תוכלו לקרוא אותן בכל ארבע.

דפדוף אוטומטי. list() מחזיר עמוד שהוא גם async iterable — עברו על כל עמוד עם for await, או שלפו רק את העמוד הראשון כשזה כל מה שאתם צריכים.

משאבים בעלי טיפוס. הגשות, משוב, רשומות יומן שינויים, הודעות, הרשמות לרשימת המתנה, תוכניות בטא ובודקים, ומאמרים וקטגוריות של מרכז העזרה — לכל אחד המתודות שמצפים מהן ופרמטרים בעלי טיפוס, כך ששגיאות הקלדה נכשלות בזמן הידור במקום בייצור.

שגיאות בעלות טיפוס. כל כשל נובע מבסיס יחיד — SupDeskError ב-JS וב-Python, APIError ב-Go ו-SupDeskException ב-Dart — כך ש-catch אחד מטפל בכול, בעוד ש-instanceof או errors.As עדיין מצמצמים למקרה הספציפי.

Webhooks. constructEventFromRequest, construct_event_from_headers, ConstructEvent ו-constructEventFromHeaders מאמתים את החתימה של SupDesk בזמן קבוע, כך שתוכלו לסמוך על מה שהמקבל שלכם פועל על פיו.

עמידות מובנית. כל קליינט חוזר על הפעולה עם backoff אקספוננציאלי ו-jitter, מכבד Retry-After, ולעולם אינו חוזר על POST מדוד שאולי כבר קיבל — רשת לא יציבה לא תגיש פעמיים את הפנייה של משתמש.

צד שרת בעיצובו

מפתחות ה-API של SupDesk מאמתים אתכם כפרויקט שלם, ולכן ערכות ה-SDK מסרבות לרוץ בדפדפן — הבנאים של JS ו-Dart זורקים חריגה אם הם מזהים DOM או build של קליינט, וקובצי ה-README אומרים בפה מלא למה. שמרו את המפתח במשתנה סביבה בצד השרת, מאחורי אנדפוינט שבשליטתכם.

שני דברים נוספים שכדאי לדעת: קריאה עובדת בכל תוכנית, בעוד שכתיבה (POST/PATCH/DELETE) דורשת תוכנית בתשלום; והמפתחות מוגדרים ברמת הפרויקט, אז העניקו לכל סביבה מפתח משלה — ותוכלו לבטל אחד בלי לגעת בשאר.

איפה SupDesk משתלבת

ערכות ה-SDK הן החצי האחורי של מדריך האינטגרציה של SupDesk ל-SaaS — תמיכה מרובת-דיירים, גישת API ו-webhooks למוצרים שרוצים תמיכה מובנית במערכות שלהם. התיעוד המלא נמצא ב-תיעוד ה-API.

איך מתחילים

קחו מפתח API מ-הגדרות סביבת העבודה → מפתחות API, התקינו את הקליינט המתאים לערימת הטכנולוגיה שלכם, והריצו את המדריך המהיר בעמוד הזה. אחר כך שכפלו את המאגר וקראו את ה-README.

התחילו ב-supdesk.app

SDKs בצד השרת לשילוב backend

דוגמאות קוד חיות שנטענות ממאגר ה-GitHub של כל SDK.

RabinApps/supdesk-nodeJavaScript / TypeScript
import { SupDesk } from "supdesk";

const supdesk = new SupDesk({ apiKey: process.env.SUPDESK_API_KEY! });

// Auto-pages: iterating walks every page for you.
for await (const submission of await supdesk.submissions.list({
  status: "open",
})) {
  console.log(submission.title);
}

await supdesk.submissions.create({
  type: "bug",
  title: "Export button does nothing",
  email: "user@example.com",
  body: "Clicking Export on the reports page has no effect.",
});
RabinApps/supdesk-pythonPython
from supdesk import SupDesk

supdesk = SupDesk()  # api_key=... or $SUPDESK_API_KEY

# Auto-pages: iterating walks every page for you.
for submission in supdesk.submissions.list(status="open"):
    print(submission.title)

supdesk.submissions.create(
    type="bug",
    title="Export button does nothing",
    email="user@example.com",
    body="Clicking Export on the reports page has no effect.",
)
RabinApps/supdesk-goGo
import "github.com/rabinapps/supdesk-go/supdesk"

client, err := supdesk.New(os.Getenv("SUPDESK_API_KEY"))
if err != nil {
    log.Fatal(err)
}

page, err := client.Submissions.List(ctx, supdesk.SubmissionsListParams{
    Status: ptr("open"),
})
if err != nil {
    return err
}
// Auto-pages: All walks every page for you.
for sub, err := range page.All(ctx) {
    if err != nil {
        return err
    }
    fmt.Println(sub.Title)
}

_, err = client.Submissions.Create(ctx, supdesk.SubmissionsCreateParams{
    Type:  supdesk.SubmissionTypeBug,
    Title: "Export button does nothing",
    Email: "user@example.com",
    Body:  "Clicking Export on the reports page has no effect.",
})
RabinApps/supdesk-dartDart
import 'dart:io';
import 'package:supdesk/supdesk.dart';

final supdesk = SupDesk(apiKey: Platform.environment['SUPDESK_API_KEY']!);

// Auto-pages: the stream walks every page for you.
final page = await supdesk.submissions.list(status: PostStatus.open);
await for (final submission in page.autoPaging()) {
  print(submission.title);
}

await supdesk.submissions.create(
  type: SubmissionType.bug,
  title: 'Export button does nothing',
  email: 'user@example.com',
  body: 'Clicking Export on the reports page has no effect.',
);

תגיות

#sdk#api#developers