Pakettisopimus
Generoitu lähdekoodijakelu on nordic-devhouse ja import-paketti nordic_devhouse. Generoitu siirtokerros käyttää httpx-kirjastoa ja tähtää tyypitettyyn Python-asiakkaaseen.
Käytä synkronista asiakasta
Käytä NordicDevhouse-asiakasta skripteissä, workereissa ja synkronisissa web-sovelluskehyksissä. Context manager sulkee yhteyspoolin varmasti. Asiakkaan voi myös sulkea erikseen, jos sen elinkaarta hallitaan riippuvuussäiliössä.
import os
from nordic_devhouse import NordicDevhouse
with NordicDevhouse(
api_key=os.environ["NORDIC_DEVHOUSE_API_KEY"],
timeout=30.0,
max_retries=3,
) as ndh:
result = ndh.scrape.run(
url="https://example.com/products",
formats=["json"],
idempotency_key="catalog-2026-08-11",
)
print(result.job_id, result.records, result.data)Käytä asynkronista asiakasta
Käytä AsyncNordicDevhouse-asiakasta olemassa olevassa tapahtumasilmukassa. Sillä on samat resurssi- ja metodinimet kuin synkronisella asiakkaalla; vain verkkometodeja odotetaan awaitilla. Älä kutsu synkronista asiakasta asynkronisesta pyyntökäsittelijästä.
import os
from nordic_devhouse import AsyncNordicDevhouse
async with AsyncNordicDevhouse(
api_key=os.environ["NORDIC_DEVHOUSE_API_KEY"]
) as ndh:
job = await ndh.scrape.start(
url="https://example.com/products",
formats=["json"],
)
result = await ndh.jobs.wait(job.id, timeout=600.0)Mallit ja paluuarvot
Julkiset vastaukset ovat muuttumattomia, tyypitettyjä datamalleja, joissa on snake_case-attribuutit sekä from_dict/to_dict-apurit. Tuntemattomat palvelinkentät säilyvät model.extra-kentässä, jotta API:n sivuversiolisäys ei hävitä dataa.
| Malli | Keskeiset attribuutit |
|---|---|
| Job | id, status, created_at, completed_at, progress, warnings |
| JobResult[T] | job_id, records, data, metadata, request_id |
| DatasetExport | id, status, format, download_url, expires_at |
| WebhookEvent[T] | id, type, created_at, data |
| RequestOptions | timeout, max_retries, idempotency_key |
Käsittele rakenteiset virheet
Kaikki paketin virheet perivät NordicDevhouseError-tyypin. Rakenteiset attribuutit voi lokittaa turvallisesti, mutta merkkijonoesitykset peittävät tunnisteet ja allekirjoitetut sisällöt. Uudelleen yritettävät virheet sisältävät retry_after-arvon, kun palvelin antaa sen.
from nordic_devhouse import (
NordicDevhouseError,
RateLimitError,
ValidationError,
)
try:
result = ndh.scrape.run(url=url, formats=["json"])
except RateLimitError as error:
logger.warning("rate limited", extra={
"retry_after": error.retry_after,
"request_id": error.request_id,
})
except ValidationError as error:
logger.error("invalid request", extra={"issues": error.issues})
except NordicDevhouseError as error:
logger.exception("SDK request failed", extra={
"code": error.code,
"request_id": error.request_id,
})Varmenna raaka webhook-runko
Anna metodille täsmälleen vastaanotetut tavut ennen JSON-jäsennystä. Varmennus tarkistaa HMAC-SHA256-allekirjoituksen ja aikaleiman sallitun eron ja palauttaa sen jälkeen tyypitetyn tapahtuman. Sovelluskehysadapteri voi poimia raa’an rungon, mutta kryptografinen varmennus pysyy SDK-moduulissa. Tallenna varmennettu tapahtumatunniste kaksoiskäsittelyn estämiseksi.
event = ndh.webhooks.verify(
payload=request.body,
signature=request.headers["Nordic-Signature"],
secret=os.environ["NORDIC_WEBHOOK_SECRET"],
)
if event.type == "scrape.completed":
import_result(event.data.job_id)Elinkaaren ja rinnakkaisuuden säännöt
- 1Käytä yhtä asiakasta uudelleen prosessin tai workerin elinkaaren ajan
- 2Synkroninen asiakas tukee tavallista worker-rinnakkaisuutta; asynkroninen asiakas kuuluu tapahtumasilmukalleen
- 3Context manager on ensisijainen resurssien vapautuksen rajapinta
- 4Peruutus lopettaa pollauksen, mutta ei peru palvelimella ajettavaa keräystyötä
- 5Mukautettu HTTP-siirto tarjotaan vain testisaumana, ei toisena julkisena verkkorajapintana