Migration sans refonte

Réduisez la migration à un changement d’hôte et de clé

Si votre produit utilise déjà l’API REST de GIPHY, Heypster a été conçu pour conserver la même mécanique de requêtes : mêmes chemins `/v1`, mêmes paramètres principaux et même forme de réponse. Sur `heypster-gif.com`, la couche compatible est préfixée par `/giphy`.

La bonne stratégie consiste à migrer en deux temps : d’abord remplacer l’hôte et la clé, puis vérifier les champs secondaires et les formats réellement consommés par votre interface.

1

hôte à remplacer

1

clé API à remplacer

0

réécriture lourde

Avant / après

// avant
const API_HOST = 'https://api.giphy.com';
const API_KEY = 'YOUR_GIPHY_API_KEY';

// après
const API_HOST = 'https://heypster-gif.com/giphy';
const API_KEY = 'YOUR_HEYPSTER_API_KEY';

1. Hôte API et authentification

Premier changement à effectuer : remplacez l’hôte GIPHY par `https://heypster-gif.com/giphy`. Les routes sont protégées par le middleware `giphy.apikey` ; si votre couche de compatibilité reproduit GIPHY, gardez le paramètre `api_key`.

Si vous utilisez déjà des clients Heypster natifs, l’en-tête `HEYPSTER-API-KEY` reste accepté. Pour une migration GIPHY sans refactor, conservez néanmoins `api_key`.

// GIPHY
fetch('https://api.giphy.com/v1/gifs/search?api_key=YOUR_GIPHY_API_KEY&q=clap');

// Heypster
fetch('https://heypster-gif.com/giphy/v1/gifs/search?api_key=YOUR_HEYPSTER_API_KEY&q=clap');

2. Correspondance des endpoints

GIPHY Heypster
https://api.giphy.com/v1/gifs/search https://heypster-gif.com/giphy/v1/gifs/search
https://api.giphy.com/v1/gifs/trending https://heypster-gif.com/giphy/v1/gifs/trending
https://api.giphy.com/v1/gifs/translate https://heypster-gif.com/giphy/v1/gifs/translate
https://api.giphy.com/v1/gifs/random https://heypster-gif.com/giphy/v1/gifs/random
https://api.giphy.com/v1/gifs/search/tags https://heypster-gif.com/giphy/v1/gifs/search/tags
https://api.giphy.com/v1/gifs/categories https://heypster-gif.com/giphy/v1/gifs/categories
https://api.giphy.com/v1/tags/related/{term} https://heypster-gif.com/giphy/v1/tags/related/{term}
https://api.giphy.com/v1/trending/searches https://heypster-gif.com/giphy/v1/trending/searches
https://api.giphy.com/v1/randomid https://heypster-gif.com/giphy/v1/randomid
https://api.giphy.com/v1/emoji https://heypster-gif.com/giphy/v1/emoji
https://api.giphy.com/v2/emoji https://heypster-gif.com/giphy/v2/emoji
https://api.giphy.com/v2/emoji/{emoji_id}/variations https://heypster-gif.com/giphy/v2/emoji/{emoji_id}/variations
https://api.giphy.com/v1/gifs/{id} https://heypster-gif.com/giphy/v1/gifs/{id}
https://api.giphy.com/v1/gifs?ids=... https://heypster-gif.com/giphy/v1/gifs?ids=...

3. Paramètres à vérifier

api_key

Conservez le même nom de paramètre pour une migration drop-in. Les clients Heypster natifs peuvent aussi utiliser `HEYPSTER-API-KEY`.

q, limit, offset, lang

Ce sont les paramètres principaux réellement pris en charge sur les endpoints de recherche et de listing.

ids

La résolution multi-ID peut rester inchangée si votre code utilise déjà une liste séparée par des virgules.

term

L’endpoint `/giphy/v1/tags/related/{term}` ajoute un paramètre de chemin explicite pour les tags liés.

emoji_id

Les variations d’emoji sont servies via `/giphy/v2/emoji/{emoji_id}/variations` ; les collections d’emoji acceptent aussi `q`, `limit` et `offset`.

rating / weirdness / bundle / fields

Auditez ces paramètres si votre client les envoie : ils ne font pas partie du noyau de compatibilité actuellement pris en charge.


4. Parsing des réponses

  • Ne réécrivez pas vos parseurs sans nécessité : commencez par valider `data`, `pagination`, `meta` et `images` sur un environnement de staging.
  • Ne supposez pas que `pagination` est toujours présente : certaines réponses unitaires et certains endpoints utilitaires renvoient seulement `data` et `meta`.
  • Les déclinaisons image sont reconstruites à partir de `gif_mini`, et les déclinaisons vidéo à partir de `h264`.
  • Vérifiez vos déclinaisons critiques une par une : `original`, `fixed_width`, `fixed_height`, `downsized`, `preview_gif`, ainsi que `mp4` et `webp` si votre client les consomme.
  • Ne dépendez pas de `webm` : le contrat actuel expose `webp` et `mp4`.
  • Pour les emojis, le payload reprend une forme proche des stickers GIPHY ; `url` pointe directement vers l’image et `/v2/emoji/{emoji_id}/variations` peut renvoyer `data: []`.
  • Si votre application lit des champs secondaires comme `analytics`, `user`, `source_tld` ou `alt_text`, faites une revue explicite avant mise en production.
const payload = await response.json();

const items = Array.isArray(payload.data) ? payload.data : [payload.data].filter(Boolean);
const nextOffset = payload.pagination?.offset ?? null;
const requestStatus = payload.meta?.status;

5. Exemple complet en JavaScript

const API_HOST = 'https://heypster-gif.com/giphy';
const API_KEY = 'YOUR_HEYPSTER_API_KEY';

export async function searchReactionGifs(query, offset = 0) {
    const url = new URL(`${API_HOST}/v1/gifs/search`);
    url.searchParams.set('api_key', API_KEY);
    url.searchParams.set('q', query);
    url.searchParams.set('limit', '24');
    url.searchParams.set('offset', String(offset));
    url.searchParams.set('lang', 'fr');

    const response = await fetch(url.toString());
    const payload = await response.json();

    return {
        items: payload.data,
        pagination: payload.pagination,
        meta: payload.meta,
    };
}
// Exemples d'autres endpoints mappés
fetch(`${API_HOST}/v1/gifs/categories?api_key=${API_KEY}`);
fetch(`${API_HOST}/v1/tags/related/party?api_key=${API_KEY}`);
fetch(`${API_HOST}/v1/randomid?api_key=${API_KEY}`);
fetch(`${API_HOST}/v2/emoji/1/variations?api_key=${API_KEY}`);

6. Checklist de migration

  • Remplacez `https://api.giphy.com` par `https://heypster-gif.com/giphy`.
  • Remplacez la clé GIPHY par la clé Heypster.
  • Testez au minimum `search`, `trending`, `random` et `get by id`.
  • Vérifiez les endpoints additionnels réellement utilisés : `categories`, `related tags`, `randomid` et `emoji`.
  • Comparez la pagination `offset` entre GIPHY et Heypster sur vos cas d’usage réels.
  • Vérifiez les formats réellement utilisés dans votre application, en particulier `mp4` et `webp`.
  • Confirmez que vos clients ne dépendent pas de `webm`.
  • Auditez les paramètres optionnels envoyés par votre client, notamment `rating`, `weirdness`, `bundle` et `fields`.
  • Validez le comportement des champs optionnels avant la mise en production.