დოკუმენტაცია

კონტენტის წაკითხვის სამი გზა და ცნობარი, რომელიც თავად მარშრუტებიდან გენერირდება, ამიტომ ვერ აღწერს ისეთ 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"])
end

API ცნობარი

იკითხება მარშრუტების ხიდან აგების დროს. endpoint აქ ჩნდება, როცა ფაილი არსებობს, და ქრება, როცა ის წაიშლება, ამიტომ აქ ვერ აღიწერება ის, რაც არ არსებობს.

მიწოდება

გამოქვეყნებული კონტენტი, რომელიც მიწოდების ტოკენით იკითხება. მისი შენახვა მომხმარებელი საიტის გარემოში უსაფრთხოა: მას მხოლოდ წაკითხვა შეუძლია.

  • GET/api/v1/authors

    The 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/verify

    Exchange a preview token for the draft it was minted for. Needs a delivery token with draft access.

  • GET/api/v1/site

    The site's settings and its content languages.

  • GET/api/v1/site/types

    The content types on the site, with their fields. Addressed by apiId; no internal ids are returned.

მართვა

ჩაწერის ოპერაციები, რომლებიც წევრობასთანაა დაკავშირებული, ამიტომ გასაღებს ვერასდროს ექნება იმაზე მეტი უფლება, ვიდრე მის შემქმნელს. სწორედ ამას იყენებს იმპორტის სკრიპტები.

  • GETPOST/api/v1/manage/authors

    List or create authors.

  • PATCHDELETE/api/v1/manage/authors/{id}

    Edit or remove one author.

  • POST/api/v1/manage/documents

    Create 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}/locales

    Start a translation of a document.

  • POST/api/v1/manage/documents/{id}/transition

    Move one language version through the workflow, including publishing it.

  • GET/api/v1/manage/documents/lookup

    Find a document by slug, drafts included — how an import decides whether it has already brought a post across.

  • POST/api/v1/manage/media

    Reserve an upload and get a presigned PUT for object storage.

  • POST/api/v1/manage/media/{id}/complete

    Confirm the bytes arrived. Idempotent, so a retried import does not count the storage twice.

  • GET/api/v1/manage/types

    Content 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-ქეშები და უკვე აგებული საიტები ჯერ კიდევ მას მიუთითებს.
თითოეული ენა ცალკე ქვეყნდება
ინგლისურის გამოქვეყნება გერმანულს არ აქვეყნებს. დოკუმენტს არ აქვს ერთი საერთო გამოქვეყნების მდგომარეობა — თითოეულ ენობრივ ვერსიას თავისი აქვს.