Menu
Coddy logo textTech

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 ! Vous allez créer des types bien structurés qui se sérialisent en JSON et fournissent des représentations sous forme de chaînes de caractères lisibles — exactement ce dont vous auriez besoin lors de la construction de réponses API réelles.

Vous organiserez votre code sur deux fichiers :

  • models.go : Définissez vos modèles de données API avec les balises JSON appropriées et les représentations sous forme de chaînes.

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

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

    Créez une structure APIResponse avec Success (bool), Message (string) et Data (Post). Mappez à "success", "message" et "data". Le champ Message doit utiliser omitempty.

  • main.go : Construisez des réponses API et démontrez à la fois la sortie JSON et les représentations sous forme de chaînes.

    Lisez un type d'opération (json ou display), puis lisez les détails de l'article : ID de l'article, titre, contenu, ID de l'auteur, nom de l'auteur, email de l'auteur et statut de publication (true ou false).

    Pour json : Créez une APIResponse avec Success: true et le Post comme données (laissez Message vide). Convertissez en JSON et affichez-le.

    Pour display : Créez le Post et affichez-le en utilisant sa méthode String, puis affichez l'Author séparément sur une nouvelle ligne.

Les entrées suivantes seront fournies :

  • Ligne 1 : Type d'opération (json ou display)
  • Ligne 2 : ID de l'article
  • Ligne 3 : Titre
  • Ligne 4 : Contenu (peut être vide)
  • Ligne 5 : ID de l'auteur
  • Ligne 6 : Nom de l'auteur
  • Ligne 7 : Email de l'auteur
  • Ligne 8 : Statut 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

Votre 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

Votre sortie devrait être :

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

Remarquez comment 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

Votre 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'ID de l'article
	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'ID 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'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 struct Author avec les valeurs lues

	// TODO: Créer une struct Post avec les valeurs lues et l'Author

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

	// Espace réservé 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