დოკუმენტაცია
კონტენტის წაკითხვის სამი გზა და ცნობარი, რომელიც თავად მარშრუტებიდან გენერირდება, ამიტომ ვერ აღწერს ისეთ endpoint-ს, რომელიც არ არსებობს.
სწრაფი დაწყება
უბრალო fetch
SDK-ისა და აგების ეტაპის გარეშე. პოსტების სიისთვის მთელი ინტეგრაცია ესაა.
const response = await fetch(
"https://api.schemahaus.com/v1/content/blog-post?locale=ka&limit=10",
{ headers: { authorization: `Bearer ${process.env.SCHEMAHAUS_TOKEN}` } },
);
const { data, meta } = await response.json();
// data is only what is PUBLISHED in Georgian. Nothing is substituted
// unless you ask: add &fallback=chain, and check item.localeFallback.Next.js
SDK და რევალიდაციის ვებჰუკი, რათა გამოქვეყნებაზე დაჭერისას გვერდი თავიდან აიგოს და ქეშის ვადის გასვლას არ დაელოდოს.
// app/[locale]/blog/[slug]/page.tsx
import { createClient } from "@schemahaus/client";
const cms = createClient({
token: process.env.SCHEMAHAUS_TOKEN,
site: process.env.SCHEMAHAUS_SITE,
});
export default async function Post({ params }) {
const { locale, slug } = await params;
const post = await cms.document("blog-post", slug, { locale });
if (!post) notFound();
return <article dangerouslySetInnerHTML={{ __html: post.data.body }} />;
}
// Publishing fires a webhook. Point a nextjs_revalidate webhook at your
// deploy and the page rebuilds itself when an editor presses publish.Jekyll, აგების დროს
სტატიკური საიტისთვის, რომელსაც საერთოდ არ აქვს გაშვების გარემო: აგებისას ჩამოტვირთეთ კონტენტი და ჩაწერეთ ის ფაილები, რომლებსაც გენერატორი ელოდება.
# _plugins/schemahaus.rb — runs at build time, writes _posts/
require "net/http"
require "json"
site = ENV.fetch("SCHEMAHAUS_SITE")
token = ENV.fetch("SCHEMAHAUS_TOKEN")
uri = URI("https://api.schemahaus.com/v1/content/blog-post?locale=en")
request = Net::HTTP::Get.new(uri)
request["authorization"] = "Bearer #{token}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)["data"].each do |post|
File.write("_posts/#{post["publishedAt"][0, 10]}-#{post["slug"]}.md",
"---\ntitle: #{post["data"]["title"].inspect}\n---\n" +
post["data"]["body"])
endAPI ცნობარი
იკითხება მარშრუტების ხიდან აგების დროს. endpoint აქ ჩნდება, როცა ფაილი არსებობს, და ქრება, როცა ის წაიშლება, ამიტომ აქ ვერ აღიწერება ის, რაც არ არსებობს.
მიწოდება
გამოქვეყნებული კონტენტი, რომელიც მიწოდების ტოკენით იკითხება. მისი შენახვა მომხმარებელი საიტის გარემოში უსაფრთხოა: მას მხოლოდ წაკითხვა შეუძლია.
GET/api/v1/authorsThe site's authors, with their per-language biographies.
GET/api/v1/content/{apiId}Published documents of one content type. Filter, sort, paginate by `page` or by cursor (`?cursor=` to start, then each page's `meta.nextCursor`); `?locale=` is strict unless `fallback` says otherwise.
GET/api/v1/content/{apiId}/{identifier}One published document, by slug or by document id.
GET/api/v1/media/{id}One media asset's metadata and variant URLs.
POST/api/v1/preview/verifyExchange a preview token for the draft it was minted for. Needs a delivery token with draft access.
GET/api/v1/siteThe site's settings and its content languages.
GET/api/v1/site/typesThe content types on the site, with their fields. Addressed by apiId; no internal ids are returned.
მართვა
ჩაწერის ოპერაციები, რომლებიც წევრობასთანაა დაკავშირებული, ამიტომ გასაღებს ვერასდროს ექნება იმაზე მეტი უფლება, ვიდრე მის შემქმნელს. სწორედ ამას იყენებს იმპორტის სკრიპტები.
GETPOST/api/v1/manage/authorsList or create authors.
PATCHDELETE/api/v1/manage/authors/{id}Edit or remove one author.
POST/api/v1/manage/documentsCreate a document in one language.
PATCHDELETE/api/v1/manage/documents/{id}Edit one language version, or soft-delete the whole document. Editing takes the revision you last read.
POST/api/v1/manage/documents/{id}/localesStart a translation of a document.
POST/api/v1/manage/documents/{id}/transitionMove one language version through the workflow, including publishing it.
GET/api/v1/manage/documents/lookupFind a document by slug, drafts included — how an import decides whether it has already brought a post across.
POST/api/v1/manage/mediaReserve an upload and get a presigned PUT for object storage.
POST/api/v1/manage/media/{id}/completeConfirm the bytes arrived. Idempotent, so a retried import does not count the storage twice.
GET/api/v1/manage/typesContent types WITH their internal ids, which every write below needs.
Strapi-სთან თავსებადობა
Strapi-ს მოთხოვნების ფორმატი იმავე გამოქვეყნებულ კონტენტზე, რათა არსებული საიტი გადმოვიდეს მანამდე, სანამ თავიდან დაიწერება.
GET/api/strapi/api/{plural}The Strapi compatibility layer: Strapi's query shape over the same published content, so an existing site can move before it is rewritten.
ოთხი წესი, რომელიც დაწყებამდე უნდა იცოდეთ
- მიწოდება ნაგულისხმევად მკაცრია
- `?locale=ka` აბრუნებს მხოლოდ იმას, რაც ქართულად არის გამოქვეყნებული. თუ კონტენტი არ არის, ის არარსებულად ჩანს და ჩუმად არ იცვლება ინგლისურით. ჩასართავად დაამატეთ `fallback=default` ან `fallback=chain`, ხოლო იმის სანახავად, რა ჩანაცვლდა, თითოეულ ელემენტზე შეამოწმეთ `localeFallback`.
- API გასცემს გამოქვეყნებულ მონაცემებს და არასდროს მონახაზებს
- რედაქტირების დროს დოკუმენტის ბოლო გამოქვეყნებული ვერსია კვლავ მიეწოდება, სანამ ვინმე ხელახლა არ გამოაქვეყნებს. თუ ცვლილება არ ჩანს, ის არ გამოქვეყნებულა — ასეც არის ჩაფიქრებული.
- მედიის გასაღებები არასდროს იცვლება
- სურათის ჩანაცვლება ქმნის ახალ ფაილს ახალი URL-ით. ძველი კვლავ მუშაობს, რადგან edge-ქეშები და უკვე აგებული საიტები ჯერ კიდევ მას მიუთითებს.
- თითოეული ენა ცალკე ქვეყნდება
- ინგლისურის გამოქვეყნება გერმანულს არ აქვეყნებს. დოკუმენტს არ აქვს ერთი საერთო გამოქვეყნების მდგომარეობა — თითოეულ ენობრივ ვერსიას თავისი აქვს.