Menu
CoddyTech

Récapitulatif - Modèles d’API REST

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy. Leçon 78 sur 107.

challenge icon

Défi

Facile

Construisons un système de modèles d’API REST pour une plateforme de blog ! Tu vas créer des types bien structurés qui se sérialisent en JSON et fournissent des représentations textuelles lisibles, exactement ce dont tu aurais besoin pour créer de vraies réponses d’API.

Tu vas organiser ton code dans deux fichiers :

  • models.go : définis tes modèles de données d’API avec des balises JSON appropriées et des représentations textuelles.

    Crée une structure Author avec les champs ID (int), Name (string) et Email (string). Associe-les aux clés JSON "id", "name" et "email". Implémente String() pour renvoyer le format [Name] <[Email]>.

    Crée une structure Post avec les champs ID (int), Title (string), Content (string), Author (structure Author imbriquée) et Published (bool). Associe-les à "id", "title", "content", "author" et "published". Le champ Content doit utiliser omitempty afin qu’un contenu vide n’apparaisse pas dans le JSON. Implémente String() pour renvoyer "[Title]" by [Author's String representation].

    Crée une structure APIResponse avec les champs Success (bool), Message (string) et Data (Post). Associe-les à "success", "message" et "data". Le champ Message doit utiliser omitempty.

  • main.go : construis des réponses d’API et illustre la sortie JSON ainsi que les représentations textuelles.

    Lis un type d’opération (json ou display), puis lis les détails de l’article : son identifiant, son titre, son contenu, l’identifiant de l’auteur, le nom de l’auteur, l’adresse e-mail de l’auteur et l’état de publication (true ou false).

    Pour json : crée une APIResponse avec Success: true et l’article comme données (laisse Message vide). Convertis-la en JSON et affiche le résultat.

    Pour display : crée l’article et affiche-le à l’aide de sa méthode String, puis affiche l’auteur séparément sur une nouvelle ligne.

Les entrées suivantes seront fournies :

  • Ligne 1 : type d’opération (json ou display)
  • Ligne 2 : identifiant de l’article
  • Ligne 3 : titre
  • Ligne 4 : contenu (peut être vide)
  • Ligne 5 : identifiant de l’auteur
  • Ligne 6 : nom de l’auteur
  • Ligne 7 : adresse e-mail de l’auteur
  • Ligne 8 : état de publication (true ou false)

Par exemple, étant donné :

json
1
Getting Started with Go
Learn the basics of Go programming
101
Jane Smith
jane@example.com
true

Ta sortie devrait être :

{"success":true,"data":{"id":1,"title":"Getting Started with Go","content":"Learn the basics of Go programming","author":{"id":101,"name":"Jane Smith","email":"jane@example.com"},"published":true}}

Et étant donné :

json
2
Draft Post

102
John Doe
john@example.com
false

Ta sortie devrait être :

{"success":true,"data":{"id":2,"title":"Draft Post","author":{"id":102,"name":"John Doe","email":"john@example.com"},"published":false}}

Remarque que le champ de contenu vide est omis de la sortie JSON.

Et étant donné :

display
3
Advanced Interfaces
Deep dive into Go interfaces
103
Alice Chen
alice@example.com
true

Ta sortie devrait être :

"Advanced Interfaces" by Alice Chen <alice@example.com>
Alice Chen <alice@example.com>

Essayez vous-même

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Lire le type d’opération
	operation, _ := reader.ReadString('\n')
	operation = strings.TrimSpace(operation)

	// Lire l’identifiant de la publication
	postIDStr, _ := reader.ReadString('\n')
	postID, _ := strconv.Atoi(strings.TrimSpace(postIDStr))

	// Lire le titre
	title, _ := reader.ReadString('\n')
	title = strings.TrimSpace(title)

	// Lire le contenu
	content, _ := reader.ReadString('\n')
	content = strings.TrimSpace(content)

	// Lire l’identifiant de l’auteur
	authorIDStr, _ := reader.ReadString('\n')
	authorID, _ := strconv.Atoi(strings.TrimSpace(authorIDStr))

	// Lire le nom de l’auteur
	authorName, _ := reader.ReadString('\n')
	authorName = strings.TrimSpace(authorName)

	// Lire l’adresse e-mail de l’auteur
	authorEmail, _ := reader.ReadString('\n')
	authorEmail = strings.TrimSpace(authorEmail)

	// Lire le statut de publication
	publishedStr, _ := reader.ReadString('\n')
	published := strings.TrimSpace(publishedStr) == "true"

	// TODO: Créer une structure Author avec les valeurs lues

	// TODO: Créer une structure Post avec les valeurs lues et l’Author

	// TODO: Gérer le type d’opération
	// Si operation vaut "json" :
	//   - Créer une APIResponse avec Success: true et le Post comme Data
	//   - Convertir en JSON à l’aide de json.Marshal
	//   - Afficher la chaîne JSON
	// Si operation vaut "display" :
	//   - Afficher le Post à l’aide de sa méthode String
	//   - Afficher l’Author sur une nouvelle ligne

	// Code provisoire pour utiliser les variables (à supprimer lors de l’implémentation)
	_ = postID
	_ = title
	_ = content
	_ = authorID
	_ = authorName
	_ = authorEmail
	_ = published
	_ = operation
	_ = json.Marshal
	fmt.Println("TODO: Implement the solution")
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Go en ligne