Segala yang papan pemuka lakukan, dari terminal anda
Satu kunci akaun. Senaraikan laman anda, terbitkan padanya, tukar namanya, baca apa yang borang anda kumpulkan, padamkannya — melalui HTTP biasa, dari skrip, kerja CI, atau seorang ejen.
Tiga arahan
Cipta kunci di papan pemuka anda, pastikan ia berfungsi, dan naikkan satu folder ke dalam talian. Kuncinya diletak dalam pengepala Authorization pada setiap panggilan.
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1/sites
curl -X POST https://harvis.dev/api/v1/sites \ -H "Authorization: Bearer hvs_…" \ -F "files=@index.html" -F "paths=index.html"
Aplikasi web dan API tidak boleh terpisah
Setiap keupayaan diisytiharkan sekali, dalam satu fail, dan kedua-dua papan pemuka dan API ini dibina daripadanya. openapi.json dijana daripada perisytiharan itu, dan binaan gagal jika kedua-duanya tidak sepadan. Jadi ini bukan dokumentasi yang menerangkan produk — ia bahan yang membentuk produk itu.
- Satu pelaksanaan bagi setiap keupayaan, dipanggil oleh aplikasi web dan skrip anda sama sahaja.
- openapi.json dijana, tidak pernah ditulis tangan, dan disajikan di /openapi.json.
- Binaan gagal sebaik sahaja laluan, kontrak dan dokumen tidak lagi sependapat.
Dengan kunci, laman itu terus milik anda
Menerbitkan tanpa akaun masih berfungsi dan akan sentiasa berfungsi — anda dapat pautan tuntutan peribadi untuk dibuka kemudian. Hantar kunci dalam panggilan yang sama, dan tiada apa lagi untuk dituntut: laman itu berada dalam akaun anda sejak bait pertama, dan ia tidak pernah luput.
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
Keseluruhan permukaan
Bentuk penuh permintaan dan respons ada dalam dokumen OpenAPI.
| kaedah | laluan | apa yang ia buat |
|---|---|---|
| GET | /api/v1 | Check that a credential works. |
| GET | /api/v1/keys | The account's API keys. Revoked keys are not listed. |
| POST | /api/v1/keys | Create an API key. |
| DELETE | /api/v1/keys/{keyId} | Revoke an API key. Anything using it stops working immediately. |
| GET | /api/v1/me | The account a credential belongs to. |
| GET | /api/v1/sites | List the account's sites, newest first. |
| POST | /api/v1/sites | Create 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}/deploy | Replace every file of a site with the uploaded set. |
| POST | /api/v1/sites/{id}/deploy-token | Issue a new deploy token for a site. The old one stops working immediately. |
| POST | /api/v1/sites/{id}/deploy/zip | Replace every file of a site from a zip archive sent as the raw request body. |
| GET | /api/v1/sites/{id}/files | Every file a site is serving. |
| POST | /api/v1/sites/{id}/files | Add or overwrite individual files, leaving the rest of the site alone. |
| DELETE | /api/v1/sites/{id}/submissions | Delete every submission for a site, or every one of a single form. |
| GET | /api/v1/sites/{id}/submissions | One 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/csv | Export a site's form submissions as CSV. |
| POST | /api/v1/sites/{id}/submissions/read | Mark every unread submission as read. |
| GET | /api/v1/sites/{id}/submissions/summary | How many submissions a site holds, how many are unread, and which forms exist. |
| POST | /api/v1/sites/import | Create a site by downloading a single page from a known artifact URL. |
Setiap kegagalan berbentuk sama
Bercabanglah pada kod, jangan sekali-kali pada mesej. Kodnya stabil; ayatnya untuk sesiapa yang membaca log.
{
"error": {
"code": "subdomainTaken",
"message": "That address is already taken. Try another."
}
}