見出し画像

Go・Ginを利用した「RESTful API開発のチュートリアル」をやってみた!<項目の削除・更新編>

こんにちは!
株式会社リヴェル 採用担当兼エンジニアのチノです💖
本日もお読みいただきありがとうございます🌈

今日は、花粉が強風の影響で大量だそうです🤧🤧
今朝起きたら目が充血していたので、納得です👀
強風だとなかなか寝付けず寝不足になってしまうので、今日は早めに寝ようと思います!🫡

ところで、皆さんは観たい映画・好きな映画はありますか?🎞️
私は鬼滅の刃の映画です・・👹⚔️

数年前に爆発的に流行った時期があったのを覚えていますでしょうか?✨
そこから1年くらい遅れて見始めたのですが、がっつりハマってしまい、
当時はマンガやアニメ、無限列車のDVDも買って楽しんでおりました❤️‍🔥(笑)
そして、今回の映画は柱稽古に入っていくところなんですよね~~!!
一番好きな柱が甘露寺蜜璃ちゃんなので楽しみです🍡✨
クライマックスに近づいて、世間も盛り上がってくるのでは?と思っています😊🎊
もう公開して1ヶ月経ってしまう+4月からアニメも始まるので、早めに観たいところです😄


さて、前置きはこれくらいにして本題に移りたいと思います!💨

今日は、前回に引き続いて「Go・Ginを利用したRESTful API開発のチュートリアルをやってみた!」データの削除更新を行っていきます!✨

Goに関する記事はこちらにまとまっておりますので、宜しければご覧ください💖

では早速やってまいります!


1.特定の項目を削除するためのハンドラーを作成する

すべてを表示・データの追加・特定の項目を表示などをやってきましたが、
共通するのはクライアントがリクエストをした際に、JSON形式でレスポンスを返す処理を実装し、mainメソッドで呼び出すことでした。

①アルバムデータをアルバムのリストから削除するコードを記述する。

🟡albums = append(albums[:i], albums[i+1:]…)がわかりづらかったので図にしてみました🟡
今回のコードはチュートリアルにはないので、下に載せます。
🔽🔽🔽
// deleteAlbumByIDは指定されたIDを持つアルバムを削除します
func deleteAlbumByID(c *gin.Context) {
	id := c.Param("id")

	//IDの値とマッチするパラメタを持つアルバムを探すためにリストのアルバムをループ
	for i, a := range albums {
		if a.ID == id {
			//アルバムをスライスから削除
			albums = append(albums[:i], albums[i+1:]...)
			//削除されたことを示すメッセージを返す
			c.IndentedJSON(http.StatusOK, gin.H{"message": "album deleted"})
			return
		}
	}
	//アルバムが見つからない場合は404を返す
	c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}

mainメソッドに追記する。

では実行してみます!
🔽🔽🔽

2.実行する(1)

⚠️サーバーが起動したままの場合は、Ctrl + Cで停止します。

①「main.go」を含むディレクトリのコマンドラインで、「$ go run . 」を実行する。

削除する前に全データを表示します!
🔽🔽🔽

②別のコマンドラインを使用し、アルバムの全データを取得するコマンド
「$ curl http://localhost:8080/albums 」を実行する。

🔽🔽🔽

③削除したいidを指定してリクエストを送信する。

🌟削除のコマンドです
 
$ curl -X DELETE http://localhost:8080/albums/1
では、削除されたのか確認します!🔍
🔽🔽🔽

④確認のため、アルバムの全データを取得するコマンド
「$ curl http://localhost:8080/albums 」を実行する。

削除出来ました✨
🌟使用したコマンドです

$ curl http://localhost:8080/albums
$ curl http://localhost:8080/albums/1

削除出来たので、更新をしていきます!

3.特定の項目を更新するためのハンドラーを作成する

①アルバムのリストを更新するコードを記述する。

下にソースコード載せます!🔽
// putAlbumByIDは指定されたIDを持つアルバムを更新します
func putAlbumByID(c *gin.Context) {
	id := c.Param("id")

	// 更新するアルバムのデータをリクエストボディから取得
	var updatedAlbum album
	if err := c.BindJSON(&updatedAlbum); err != nil {
		c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// IDの値とマッチするアルバムを探す
	for i, a := range albums {
		if a.ID == id {
			// アルバムのデータを更新
			albums[i] = updatedAlbum
			// 更新されたことを示すメッセージを返す
			c.IndentedJSON(http.StatusOK, a)
			return
		}
	}
	// アルバムが見つからない場合は404を返す
	c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}

mainメソッドの中身を追記する。

🔽🔽🔽

4.実行する(2)

⚠️サーバーが起動したままの場合は、停止します。
Ctrl + Cで停止出来ます。

①「main.go」を含むディレクトリのコマンドラインで、「$ go run . 」を実行する。

🔽🔽🔽

②別のコマンドラインを使用し、アルバムの全データを取得するコマンド
「$ curl http://localhost:8080/albums 」を実行する。
③変更したいidを指定してリクエストを送信する。

最後に、正しく更新出来ているか確認します🔍
下に使用したコマンド記載します!
🌟全データを取得するコマンドです
$ curl http://localhost:8080/albums

🌟特定の項目を更新するコマンドです
$ curl -X PUT http://localhost:8080/albums/3 `

③確認のため、アルバムの全データを取得するコマンド
「$ curl http://localhost:8080/albums 」を実行する。

成功です✨

無事、削除と更新を実装出来ました!
チュートリアルでは扱っていない内容ですが、勉強になりました!❤️‍🔥


最後になりますが、本日も最後までお読みいただきありがとうございました。
弊社ではエンジニア採用を強化中ですので、気になってくださった方はHP(
現在改修中)やnoteのマガジン「株式会社リヴェルinfo」を覗いてみてください💖
お気軽なご応募をお待ちしております!😄

また明日もお読みいただけると嬉しいです😸🧡
本日もお読みいただきありがとうございました🌈


この記事が参加している募集

やってみた

採用の仕事