Menu
CoddyTech

Özet - REST API Modelleri

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 78 / 107.

challenge icon

Görev

Kolay

Bir blog platformu için REST API model sistemi oluşturalım! JSON'a serileştirilen ve okunabilir metin gösterimleri sağlayan, gerçek API yanıtları oluştururken ihtiyaç duyacağınız türden, iyi yapılandırılmış türler oluşturacaksınız.

Kodunuzu iki dosyaya ayıracaksınız:

  • models.go: Uygun JSON etiketleri ve metin gösterimleriyle API veri modellerinizi tanımlayın.

    Author struct'ını ID (int), Name (string) ve Email (string) alanlarıyla oluşturun. Bunları "id", "name" ve "email" JSON anahtarlarına eşleyin. String() metodunu, [Name] <[Email]> biçimini döndürecek şekilde uygulayın.

    Post struct'ını ID (int), Title (string), Content (string), Author (iç içe Author struct'ı) ve Published (bool) alanlarıyla oluşturun. Bunları "id", "title", "content", "author" ve "published" anahtarlarına eşleyin. Boş içeriğin JSON'da görünmemesi için Content alanında omitempty kullanın. String() metodunu, "[Title]" by [Author's String representation] değerini döndürecek şekilde uygulayın.

    APIResponse struct'ını Success (bool), Message (string) ve Data (Post) alanlarıyla oluşturun. Bunları "success", "message" ve "data" anahtarlarına eşleyin. Message alanında omitempty kullanın.

  • main.go: API yanıtları oluşturun ve hem JSON çıktısını hem de metin gösterimlerini örnekleyin.

    Bir işlem türü (json veya display) okuyun, ardından gönderi ayrıntılarını okuyun: gönderi kimliği, başlık, içerik, yazar kimliği, yazar adı, yazar e-postası ve yayımlanma durumu (true veya false).

    json için: Success: true ve veri olarak Post içeren bir APIResponse oluşturun (Message alanını boş bırakın). JSON'a dönüştürüp yazdırın.

    display için: Post'u oluşturun ve String metodunu kullanarak yazdırın, ardından Author'ı yeni bir satırda ayrı olarak yazdırın.

Aşağıdaki girdiler sağlanacaktır:

  • 1. satır: İşlem türü (json veya display)
  • 2. satır: Post kimliği
  • 3. satır: Başlık
  • 4. satır: İçerik (boş olabilir)
  • 5. satır: Author kimliği
  • 6. satır: Author adı
  • 7. satır: Author e-postası
  • 8. satır: Yayımlanma durumu (true veya false)

Örneğin, şu girdi verildiğinde:

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

Çıktınız şöyle olmalıdır:

{"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}}

Şu girdi verildiğinde:

json
2
Draft Post

102
John Doe
john@example.com
false

Çıktınız şöyle olmalıdır:

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

Boş içerik alanının JSON çıktısında yer almadığına dikkat edin.

Şu girdi verildiğinde:

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

Çıktınız şöyle olmalıdır:

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

Kendin dene

package main

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

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

	// İşlem türünü oku
	operation, _ := reader.ReadString('\n')
	operation = strings.TrimSpace(operation)

	// Gönderi ID'sini oku
	postIDStr, _ := reader.ReadString('\n')
	postID, _ := strconv.Atoi(strings.TrimSpace(postIDStr))

	// Başlığı oku
	title, _ := reader.ReadString('\n')
	title = strings.TrimSpace(title)

	// İçeriği oku
	content, _ := reader.ReadString('\n')
	content = strings.TrimSpace(content)

	// Yazar ID'sini oku
	authorIDStr, _ := reader.ReadString('\n')
	authorID, _ := strconv.Atoi(strings.TrimSpace(authorIDStr))

	// Yazar adını oku
	authorName, _ := reader.ReadString('\n')
	authorName = strings.TrimSpace(authorName)

	// Yazar e-posta adresini oku
	authorEmail, _ := reader.ReadString('\n')
	authorEmail = strings.TrimSpace(authorEmail)

	// Yayımlanma durumunu oku
	publishedStr, _ := reader.ReadString('\n')
	published := strings.TrimSpace(publishedStr) == "true"

	// TODO: Okunan değerlerle bir Author struct oluştur

	// TODO: Okunan değerlerle ve Author ile bir Post struct oluştur

	// TODO: İşlem türünü işle
	// operation "json" ise:
	//   - Success: true ve Data olarak Post içeren bir APIResponse oluştur
	//   - json.Marshal kullanarak JSON biçimine dönüştür
	//   - JSON dizesini yazdır
	// operation "display" ise:
	//   - Post nesnesini String metodunu kullanarak yazdır
	//   - Author nesnesini yeni bir satıra yazdır

	// Değişkenleri kullanmak için geçici kod (uygularken kaldır)
	_ = postID
	_ = title
	_ = content
	_ = authorID
	_ = authorName
	_ = authorEmail
	_ = published
	_ = operation
	_ = json.Marshal
	fmt.Println("TODO: Implement the solution")
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi