Tests et verification
Apres avoir deploye votre site, suivez cette checklist pour verifier que tout fonctionne.
Checklist de verification
- Le backend est accessible (
/api/healthrepond 200) - Le token est valide (requete avec token retourne 200, pas 401)
- Les donnees sont presentes (le module a du contenu publie)
- Le CORS fonctionne (requete depuis le navigateur, pas d'erreur CORS)
- Le site affiche les donnees correctement
Commandes curl de test
1. Verifier que le backend est en ligne
curl -s "https://api.zoddev.site/api/health" \
-H "Origin: https://app.zoddev.site"
# Attendu : {"status":"ok"} ou equivalent
2. Tester un endpoint avec votre token
curl -s "https://api.zoddev.site/api/blog/v1/public/posts" \
-H "x-api-key: <VOTRE_TOKEN>" \
-H "X-Project-Id: 1" \
-H "Origin: https://votre-site.com"
# Attendu : {"success":true,"data":[...]}
3. Verifier les headers CORS
curl -s "https://api.zoddev.site/api/blog/v1/public/posts" \
-H "x-api-key: <VOTRE_TOKEN>" \
-H "Origin: https://votre-site.com" \
-v 2>&1 | grep -i "access-control"
# Attendu : Access-Control-Allow-Origin: https://votre-site.com
4. Tester un endpoint inexistant (doit retourner 404, pas 401)
curl -s "https://api.zoddev.site/api/blog/v1/public/inexistant" \
-H "x-api-key: <VOTRE_TOKEN>" \
-H "Origin: https://votre-site.com"
# Attendu : 404 Not Found (pas 401/403)
Erreurs courantes
| Code | Message | Cause probable | Solution |
|---|---|---|---|
| 400 | Project ID required |
Token global sans X-Project-Id | Ajoutez le header X-Project-Id ou utilisez un token project-scoped |
| 401 | Invalid API token |
Token invalide, expire ou revoque | Verifiez le token dans le dashboard, recreez-en un si necessaire |
| 401 | API token required |
Aucun token envoye | Ajoutez le header x-api-key ou Authorization: Bearer |
| 403 | Forbidden |
Permission insuffisante ou origine non autorisee | Verifiez les entites/permissions du token et les origines autorisees |
| 403 | Entity access denied |
Le token n'a pas acces a cette entite | Ajoutez l'entite manquante au token |
| 404 | Not found |
Endpoint inexistant ou ressource non publiee | Verifiez le path et que le contenu est en statut published |
| 429 | Too many requests |
Rate limiting atteint | Implementez du cache cote client, reduisez la frequence des appels |
Test depuis le navigateur
- Ouvrez votre site deploye
- Ouvrez les DevTools (F12) > onglet Network
- Rechargez la page
- Verifiez les requetes vers
api.zoddev.site:- Status : 200
- Response : JSON avec les donnees attendues
- Headers :
Access-Control-Allow-Originpresent
Integration optionnelle : module Documentation
Vous pouvez ajouter une section documentation a votre site externe en consommant le module docs.
Etape 1 : Token avec entite documentation
Ajoutez documentation aux entites de votre token existant, ou creez un token dedie.
Etape 2 : Fichier docs-config.js
export const DOCS_CONFIG = {
API_URL: 'https://api.zoddev.site/api/docs/v1/public',
API_TOKEN: '<VOTRE_TOKEN_DOCS>',
PROJECT_ID: '1',
SPACE_SLUG: 'api-blog', // slug du space a afficher
CACHE_DURATION: 300000,
};
Etape 3 : Client docs-api.js
import { DOCS_CONFIG } from './docs-config.js';
const cache = new Map();
async function request(endpoint) {
const url = `${DOCS_CONFIG.API_URL}/${endpoint}`;
const now = Date.now();
const cached = cache.get(url);
if (cached && now - cached.timestamp < DOCS_CONFIG.CACHE_DURATION) {
return cached.data;
}
const res = await fetch(url, {
headers: {
'x-api-key': DOCS_CONFIG.API_TOKEN,
'X-Project-Id': DOCS_CONFIG.PROJECT_ID,
},
});
const json = await res.json();
const data = json.data ?? json;
cache.set(url, { data, timestamp: now });
return data;
}
export const getSpacePages = (slug) =>
request(`spaces/${encodeURIComponent(slug || DOCS_CONFIG.SPACE_SLUG)}/pages`);
export const getPageBySlug = (slug) =>
request(`pages/${encodeURIComponent(slug)}`);
export const searchDocs = (query) =>
request(`search?q=${encodeURIComponent(query)}`);
Etape 4 : Routes dans votre site
Ajoutez des routes #/docs et #/docs/:slug dans votre router pour afficher la liste des pages et le contenu individuel.
Le contenu des pages est en Markdown — utilisez une librairie comme marked ou showdown pour le rendu HTML.