osio_sioの日記

自分用メモ

apiのパスの修正について考えた

func main() {
    // 略

    engine.POST("/todo/create", todoHandler.HandleTodoCreate)
    engine.GET("/todo/get", todoHandler.HandleTodoGet)
    engine.POST("/todo/update/:id", todoHandler.HandleTodoUpdate)
    engine.DELETE("/todo/delete/:id", todoHandler.HandleTodoDelete)

    /* ===== サーバの起動 ===== */
    log.Println("Server running...")
    engine.Run(":8080")
}

こんな感じでコードを書いていたのですが、「apiのパスが一般的なrestのpath設計となっていない」というコメントを頂き、何が良くないのか考えてみました。

REST APIエンドポイントの命名について✍️

調べていくうちにわかったこと:

  1. 一般にURIは、実行される機能を表す動詞を付加するのではなく、リソースの内容を特定する名詞での命名が望ましい。 例えば、engine.POST("/todo/create", todoHandler.HandleTodoCreate)におけるcreateは必要ないということです。これは、CRUD機能がすでにPOSTのように、httpリクエストで指定されているためです。 (ただし、REST の構造にマッチさせられないアクションは、/search のようなエンドポイントを作ることもあります)
  2. 直感的でわかりやすく、省略形でない名称を使う
  3. _やキャメルケースを使うのではなく、ハイフンを使う
  4. 小文字を使う
  5. ファイル拡張子を避ける
  6. KISS の原則に従い、エンドポイントは一貫して複数形を使う

以上のことから、

engine.POST("/todos", todoHandler.HandleTodoCreate)
engine.GET("/todos", todoHandler.HandleTodoGet)
engine.PUT("/todos/:id", todoHandler.HandleTodoUpdate)
engine.DELETE("/todos/:id", todoHandler.HandleTodoDelete)

このように直すと良さそうだとわかりました。

qiita.com