MILITANT API

Militant API V2

Memstara, malcentrigita kaj libera programinterfaco (REST, WebRTC, ActivityPub). Konstruita por kolektiva emancipiĝo kaj komunaj ciferecaj rimedoj sen monopolo.

API Aktiva (2.0.0) AGPLv3 Libera Kodo Go 1.26 + MariaDB LTS

Enkonduko & Arkitekturo de Militant API V2

Militant API V2 estas moderna, alt-efikeca, malcentrigita kaj memadministrata servilo verkita en Go 1.26 kun subteno de MariaDB 10.11+ LTS. Ĝi provizas plenan kongruecon kun la ekzistanta ekosistemo (retumilo, poŝtelefona aplikaĵo Militant Flutter kaj fediverseaj serviloj).

✓ REST API & Kongrueco V1

Duobla aliro : modernaj JSON-itineroj /v2/... kaj plena kongruo kun historiaj poŝtelefonaj skriptoj /v1/*.php.

✓ WebRTC LiveKit & Coturn TURN

Salono-generado de ĵetonoj por voĉaj kaj videaj diskutoj, kune kun Coturn STUN/TURN relajo por fajroŝirmiloj.

✓ Malcentrigita Ferediverseco

ActivityPub integriĝo, sekvado de foraj profiloj en Mastodon/Lemmy kaj sinkronigo de liberecaj komunumoj.

Aŭtentigo & Sekureco

Ĉiuj protektitaj itineroj postulas alir-ĵetonon senditan en la HTTP-kaplinio Authorization :

Authorization: Bearer <64-signa-sekura-ĵetono>

Por poŝtelefonaj elŝutoj (ekz. medi-dosieroj aŭ eksportoj), la ĵetono ankaŭ estas akceptata kiel URL-parametro : ?token=<ĵetono>.

Norma Responda Formato & Eraroj

Ĉiu API-respondo estas strukturita en antaŭvidebla JSON-envelopo :

// Sukcesa respondo (HTTP 200 / 201)
{
  "success": true,
  "data": { ... },
  "message": "Operacio sukcese plenumita"
}

// Erara respondo (HTTP 400 / 401 / 403 / 404 / 500)
{
  "success": false,
  "error": "Klare priskribita erar-mesaĝo"
}

Paĝigo & Parametroj

La listoj (afiŝoj, komentoj, sciigoj, membroj) subtenas la normajn parametrojn page (komencante je 1) kaj per_page (limo inter 1 kaj 50, defaŭlte 20) :

GET /v2/posts?page=1&per_page=20&feed=global

Aŭtentigo & Ĵetonoj

POST /v2/auth/login — Ensaluto per uzantnomo/retpoŝto kaj pasvorto (kun TOTP 2FA)
POST /v2/auth/refresh — Renovigo de aktiva API-ĵetono
GET /v2/tokens — Listo de personaj alir-ĵetonoj
POST /v2/tokens — Kreado de nomita ĵetono kun limigita vivdaŭro

Afiŝoj & Sociaj Enhavoj

GET /v2/posts — Legado de fluo (sekvata, tutmonda, aŭ de uzanto)
POST /v2/posts — Publikigo de nova mesaĝo
GET /v2/comments?post_id={id} — Komentoj kaj respondoj
POST /v2/comments — Aldono de komento aŭ respondo kun parent_id

Grupoj, Paĝoj & Mesaĝado

GET /v2/groups — Listo de memadministrataj grupoj
GET /v2/pages — Iniciatoj kaj militantaj paĝoj
GET /v2/messages — Privataj konversacioj
POST /v2/translate — Tradukado per memgastigita LibreTranslate

Pet-Agordo

Respondo

Atendas peton... 0 ms
// La respondo aperos ĉi tie

Rapida Dediĉita Lanĉo (Quickstart)

Uzu cURL por testi rekte vian lokan aŭ foran instancon :

curl -s https://api.militant.revlibertaire.com/v2 | jq .

Aŭtentigo per Ĵetono

Ĉiu peto protektita postulas la kaplinion Authorization kun portanta ĵetono :

curl -H "Authorization: Bearer <VIA_JETONO>" https://api.militant.revlibertaire.com/v2/posts

Python SDK

Pura modulo sen ekstera dependeco, plene tipita per dataclasses kaj kongrua kun Python 3.10+.

from militant import MilitantClient

client = MilitantClient(base_url="https://api.militant.revlibertaire.com")
client.authenticate("uzantnomo", "pasvorto")
posts = client.get_posts(feed="global")
print(posts)

TypeScript / JS SDK

Moderna ESM-kliento uzanta la norman fetch API de retumiloj kaj Node.js/Bun.

import { MilitantClient } from '@militant/sdk';

const client = new MilitantClient({ baseUrl: 'https://api.militant.revlibertaire.com' });
await client.login('uzantnomo', 'pasvorto');
const posts = await client.getPosts({ feed: 'global' });
console.log(posts);

Go SDK

Oficiala Go-kliento, nula ekstera dependeco (pura net/http), forta tipado kaj subteno de context.Context.

client := militant.NewClient("https://api.militant.revlibertaire.com")
token, err := client.Login(ctx, "uzantnomo", "pasvorto", "")
posts, err := client.ListPosts(ctx, "global", 1, 10)

Rust SDK

Oficiala Rust-kliento uzanta ureq kaj serde. Sekura memoro, nula nesekura kodo kaj sinkrona facileco.

let mut client = MilitantClient::new("https://api.militant.revlibertaire.com");
let auth = client.login("uzantnomo", "pasvorto", None)?;
let posts = client.list_posts("global", 1, 10)?;