http api

Panonun yaptığı her şey, terminalinden

Tek bir hesap anahtarı. Sitelerini listele, üzerlerine dağıt, adlarını değiştir, formlarının topladıklarını oku, sil — düz HTTP ile, bir betikten, bir CI işinden ya da bir ajandan.

hızlı başlangıç

Üç komut

Panonda bir anahtar oluştur, çalıştığını doğrula ve bir klasörü yayına al. Anahtar her çağrıda Authorization başlığına konur.

Anahtarın çalıştığını doğrula
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1
Hesapta ne var, gör
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1/sites
Bir klasörü yayınla
curl -X POST https://harvis.dev/api/v1/sites \
  -H "Authorization: Bearer hvs_…" \
  -F "files=@index.html" -F "paths=index.html"
tek sözleşme

Web uygulaması ile API birbirinden ayrı düşemez

Her yetenek bir kez, tek bir dosyada tanımlanır; hem pano hem bu API ondan üretilir. openapi.json o tanımdan üretilir ve ikisi anlaşmazsa derleme başarısız olur. Yani bu, ürünü anlatan bir belge değil — ürünün yapıldığı şeyin ta kendisi.

  • Yetenek başına tek uygulama; web uygulaması da senin betiğin de aynısını çağırır.
  • openapi.json üretilir, elle yazılmaz ve /openapi.json adresinden sunulur.
  • Bir rota, sözleşme ve belge birbirini tutmaz olduğu anda derleme başarısız olur.
dağıtımlar

Anahtar varsa site hemen senindir

Hesapsız dağıtım hâlâ çalışıyor ve hep çalışacak — sonradan açacağın özel bir sahiplenme bağlantısı alırsın. Aynı çağrıda bir anahtar gönder, sahiplenilecek bir şey kalmaz: site ilk bayttan itibaren hesabındadır ve süresi hiç dolmaz.

zip -r site.zip . && curl -X POST https://harvis.dev/api/upload \
  -H "Authorization: Bearer hvs_…" \
  -H "Content-Type: application/zip" --data-binary @site.zip
uç noktalar

Yüzeyin tamamı

İstek ve yanıtların tam biçimleri OpenAPI belgesindedir.

yöntemyolne yapar
GET/api/v1Check that a credential works.
GET/api/v1/keysThe account's API keys. Revoked keys are not listed.
POST/api/v1/keysCreate an API key.
DELETE/api/v1/keys/{keyId}Revoke an API key. Anything using it stops working immediately.
GET/api/v1/meThe account a credential belongs to.
GET/api/v1/sitesList the account's sites, newest first.
POST/api/v1/sitesCreate a site from a folder of files.
DELETE/api/v1/sites/{id}Delete a site, its files and its form submissions.
GET/api/v1/sites/{id}One site.
PATCH/api/v1/sites/{id}Rename a site, change its web address, or both.
POST/api/v1/sites/{id}/deployReplace every file of a site with the uploaded set.
POST/api/v1/sites/{id}/deploy-tokenIssue a new deploy token for a site. The old one stops working immediately.
POST/api/v1/sites/{id}/deploy/zipReplace every file of a site from a zip archive sent as the raw request body.
GET/api/v1/sites/{id}/filesEvery file a site is serving.
POST/api/v1/sites/{id}/filesAdd or overwrite individual files, leaving the rest of the site alone.
DELETE/api/v1/sites/{id}/submissionsDelete every submission for a site, or every one of a single form.
GET/api/v1/sites/{id}/submissionsOne page of a site's form submissions, newest first.
DELETE/api/v1/sites/{id}/submissions/{submissionId}Delete one submission.
GET/api/v1/sites/{id}/submissions/{submissionId}One submission.
GET/api/v1/sites/{id}/submissions/csvExport a site's form submissions as CSV.
POST/api/v1/sites/{id}/submissions/readMark every unread submission as read.
GET/api/v1/sites/{id}/submissions/summaryHow many submissions a site holds, how many are unread, and which forms exist.
hatalar

Her hata aynı biçimde gelir

Koda göre dallan, asla mesaja göre değil. Kodlar sabittir; metin, log'u okuyan insan içindir.

{
  "error": {
    "code": "subdomainTaken",
    "message": "That address is already taken. Try another."
  }
}