📚

クリーンアーキテクチャ with Go でモンハンAPI作ってみた

2023/06/09に公開

何を作ったか?

モンスターハンターのモンスターの名前や分類、生息地を取得できるAPI

どうして作ったか?

  • クリーンアーキテクチャを使って、何かアウトプットしたい!
  • クリーンアーキテクチャで何かするならGoがいい!(使い慣れているので。)
  • poke APIはあるのにモンハンAPIはないの!?

作った人の自己紹介

王立古生物書士隊 情報分隊技術部 所属 のオーガといいます!

(モンハン世界の研究員という設定)

真面目に書くと、

  • Goが好き!
  • エンジニア歴4年目
  • サーバ好き!
  • 障害対応や検証ほど楽しい業務はない!
  • 最近、アーキテクチャも学ばないとだなと感じて色々学習している

成果物

https://mh-api-xpzdc5i4rq-an.a.run.app/

取得できる情報

json key 内容
id int モンスターのid
name string モンスターの名前
desc string モンスターの説明
location string モンスターの生息地
specify string モンスターの分類
weakness___attack string モンスターの弱点(物理)
weakness___element string モンスターの弱点(属性)
{
  "monster": {
    "id": {
      "Value": 1
    },
    "name": {
      "Value": "アプトノス"
    },
    "desc": {
      "Value": ""
    },
    "location": {
      "Value": ""
    },
    "specify": {
      "Value": ""
    },
    "weakness___attack": {
      "Value": {
        "前脚": "",
        "頭部": "",
        "胴体": "",
        "後脚": ""
        "尻尾": ""
      }
    },
    "weakness___element": {
      "Value": {
        "前脚": "",
        "頭部": "",
        "胴体": "",
        "後脚": "",
        "尻尾": ""
      }
    }
  }
}

API仕様

誰でも参照可能

  • GET
    • /v1/monsters
    • /v1/monsters/{id}

認証が必要

  • POST
    • /v1/auth/monsters
    • /v1/auth/monsters/json
  • PATCH
    • /v1/auth/monsters/{id}
  • DELETE
    • /v1/auth/monsters/{id}

システム系

  • GET
    • /v1/health
    • /v1/auth
  • API
メソッド エンドポイント 内容
GET /v1/auth/monsters 全モンスター一覧を取得する
GET /v1/monsters/{id} モンスターのidを指定して取得する
POST /v1/auth/monsters モンスター情報追加する
POST /v1/auth/monsters/json モンスター情報をjsonから追加する
PATCH /v1/auth/monsters/{id} モンスター情報をidを指定して更新する
DELETE /v1/auth/monsters/{id} モンスター情報をidを指定して削除する
  • システム
メソッド エンドポイント 内容
GET /v1/health サーバのヘルスチェック用
GET /v1/auth データの追加、更新、削除を行うための認証を行うため

ソースコードについて

本アプリは、オープンソースとして開発していますので、以下のGitHubにコードを公開しております。

https://github.com/o-ga09/MH-API

データの追加について

モンスターハンターの新作発売に伴い新しく登場したモンスターを追加したい場合は、data/input/data.csvにモンスターの情報を追加してコミットするとgithub actionsでjsonの作成、APIへの認証、データの追加まで行います。

このAPIについて

ひとまず完成しましたので、Zennにアウトプットとして記事を残ししておき、オープンソースプロジェクトとして成長させていきたいと考えています!
そのために、データの収集からなのですが。。。

まとめ

クリーンアーキテクチャは、依存性注入とか依存性逆転とかよくわからなかったり、パッケージ構成のベストプラクティスがよくわからなかったりしましたがとにかく書いて作ってみることが一番理解することを学びました。(体で覚えていくタイプなので。。。)

つぎは、flutter,Rust,Reactあたりクリーンアーキテクチャをやっていきたいと思います!

Discussion