◆当ページにはプロモーションが含まれています

プログラミング知識

RESTful API の時、検索はどうする? – StackOverFlow の回答を読んでみる

みなさん、こんにちは。どんぶラッコです。

今日は RESTful API 設計のときに、検索APIをどうするかというテーマについてお話ししたいと思います。

RESTful API とは何か?については↓↓のページをご確認ください。

https://proglearn.com/2020/11/27/rest-api-%e3%81%a8%e3%81%af%ef%bc%9f-post-%e3%82%84-put%e3%81%ae%e6%99%82%e3%81%ab-api%e3%81%af%e4%bd%95%e3%82%92%e8%bf%94%e3%81%99%e3%82%88%e3%81%86%e3%81%ab%e8%a8%ad%e8%a8%88%e3%81%97%e3%81%9f/

この記事にも書いてあるように、URLで名詞を、HTTPメソッドで動詞の役割をはたしています。

  • /books GET … 本の一覧表示
  • /books POST …. 本の新規作成
  • /books/{id} GET … 本の個別情報表示
  • /books/{id} PUT … 本の個別情報表示
  • /books/{id} DELETE … 本の個別情報削除

このような設計の時、本を検索するAPIの窓口はどこにするか、迷ったことはありませんか?

そこで、今回はStackOverflowの回答を例に、みなさんがどのように対処しているかを見ていきましょう!

Stack Overflow の回答例を見てみよう

/search をリソースとして定義してしまえ派

一番多く票を集めているのは、 search 自体もリソースとして捉える方法です。その場合のメソッドは POST としています(検索を作成しているから、だとか)。

ただしPOSTを使うと検索結果をブックマークできないということが指摘されています。

この点については POSTした結果を保存し、その結果を表示すればいいとしています。

/search/XXXXXX GET ということですね

どんぶラッコ
どんぶラッコ
コメントの中には「なんでこれが一番評価が高いのか全くわからない」というコメントもあります。
筆者としてもちょっと違和感があります

GET通信 としてパラメータを渡す

こっちの実装をする方が多いのではないでしょうか。

GET通信のパラメータとして検索条件を渡す方法です。

ただし、その設計方法は人によってさまざまです。

こちらの記事で紹介されているパラメータの設計方法をご紹介しますね。

まずは直接渡す方法

/book?var1=xxxx&var2=xxxx

Laravelでの実装方法を紹介している例もあります。

/books?filters[status_id]=1&filters[author]=Hoge&page=2&include=relatedResource

ただし、この実装方法の場合、 [] がブラウザによっては読み取れないという指摘もあります。

また、こんな書き方もありました

/books?filter=param1%3Dvalue1%26param2%3Dvalue2

%3D= ですね


私は結局シンプルにGET通信パターンの一番最初のものを使うことが多いです。みなさんはどうしていますか?

エンジニアにおすすめ転職サイト

マイナビIT AGENT
迷ったらまずはココ。求人数が多いため希望や条件にマッチする求人が見つかる!

レバテックキャリア
担当者のレベルが高い。エンジニア特化で15年の実績がある実績で初回提案での内定率驚異の90%!

JOIN
副業やフリーランスとして高額報酬案件を見つけるならJOIN。未経験者でも案件獲得実績豊富が強み!

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
一緒によく読まれている記事

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です