1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

【チュートリアル】GoとGinを使ったRESTful API開発のチュートリアルで詰まったところ

Posted at

Goの勉強を始め、基本的な文法はさらったのでAPIの勉強をしてみたいと思い、以下のチュートリアルをしてみました。

割と簡単にAPIの実装の仕方を学べたのでおすすめ。
本記事ではわからなかった単語や詰まったところについてまとめておきます。
ぜひ参考にしてください。

"go mod tidy"と"go get ."の違い

  • go mod tidyはモジュールの依存関係を更新するため
  • go get .は実際モジュールをインストールするため

go mod tidyコマンドは、モジュールの依存関係を解決し、go.modファイルとgo.sumファイルを最新の状態に更新します。
go get .コマンドは、現在のディレクトリにあるパッケージとその依存関係をダウンロードし、インストールます。

MustBindWith機能

MustBindWithは、指定されたバインディングエンジンを使用して、渡された構造体ポインタにデータをバインドする機能です。

バインドとは、HTTPリクエストからのデータを構造体にマッピングするプロセスのことです。構造体にはフィールドが定義されており、それぞれがリクエストデータの特定の部分に対応しています。

フィールドとは
type Person struct {
    Name  string
    Age   int
    Email string
}

上記の例では、Personという構造体が定義されています。この構造体には、Name、Age、Emailという3つのフィールドがあります。それぞれのフィールドは、文字列型 (string)、整数型 (int)、文字列型 (string) のデータを保持します。

関数になんでポインタを渡すん?

if err := c.BindJSON(&newAlbum); err != nil {
		return
	}

ポインタを渡すと元の変数を直接変更する
そのまま変数を渡すと変数のコピーが変更される

[Write a handler to add a new item] でもとのコマンドじゃ動かん。

以下はサイトに載っているコマンド

$ curl http://localhost:8080/albums \
    --include \
    --header "Content-Type: application/json" \
    --request "POST" \
    --data '{"id": "4","title": "The Modern Sound of Betty Carter","artist": "Betty Carter","price": 49.99}'

動いたコマンド

curl -X POST -H "Content-Type: application/json" -d '{"id": "4","title": "The Modern Sound of Betty Carter","artist": "Betty Carter","price": "49.99"}' http://localhost:8080/albums

動いたコマンドの説明

-X:HTTPメソッドを設定。(今回はPOST)
-H:リクエストヘッダーのContent-typeを設定。
-d:リクエストボディとして送信するデータ

リクエストヘッダーって何?

HTTPリクエスト中のメタデータ情報を含む部分です。クライアントがサーバーに対してリクエストを送信する際に、リクエストヘッダーに必要な情報を含めることで、サーバーに対する要求の詳細や処理方法を伝えることができます。

今回はこの中のコンテンツタイプを指定した。

  • HTTPメソッド(GET、POST、PUT、DELETEなど): リクエストの目的や処理方法を指定します。
  • URLやパス: リクエストの対象となるリソースの場所や識別子を指定します。
  • ホスト名: リクエストを受けるサーバーのホスト名を指定します。
  • ユーザーエージェント: リクエストを行うクライアント(通常はWebブラウザ)の情報を指定します。
  • コンテンツタイプ: リクエストボディの形式や種類を示します。例えば、JSONやXMLなどのデータ形式を指定する場合があります。
  • 認証情報: リクエストを送信するために認証が必要な場合、認証に関する情報を含めることがあります。
  • クッキー: クライアントが保持するセッション情報などを含めることがあります。

今回の学び

  • chromeのページ翻訳使ったら結構すらすら進んだ。
  • API難しく考えすぎてた。
  • ChatGPTに質問しながら進めるの楽しい。

課題

  • フロント側でどうやって受け取るの?
  • データベースとの連携は?
  • 英語の原文のまま読んだ方がもっとニュアンス取れそう。

PS

7月まででバックエンドとかデータベース関係勉強し終わって7月はwebアプリ作ろうと思ってたけど、厳しそう。
早く何かを形にしたい。
夏インターン、1社しか決まってない。(´·ω·`)
長期インターン探し中。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?