Help us understand the problem. What is going on with this article?

【知らなくて】僕がRuby on railsを使ってRESTfulなAPIを作ろうとしたら【m9(^Д^)プギャーされた】

More than 5 years have passed since last update.

概要

どうもお疲れ様です。

RailsでAPIを作ることになったので、
とりあえずガチャっと作ってみました。

その後に RESTの制約 というものを友達に教えてもらいました。

シラナカッタ/(^o^)\ナンテコッタイ(゚д゚)情弱ジョウジャクゥ!

なんかAPIを作る時にRESTという制約に沿ってRESTfulなAPIを作るほうが
ある程度ルール化されているので、
今後の拡張方針に迷わず
「get post put delete」を使い分けできる。というもの?
らしいです。よくわからんな。

RESTfulなAPIじゃなきゃAPIじゃない!
というわけではないです。RESTfulなAPIが必ずしも
絶対的に良いAPIというわけではないんだ....(苦笑)

というわけで、絶対的に良いわけではないですが
RESTfulをひとまず勉強してみたいと思います。

なぜRESTfulを目指すのか。

この辺を読んどけばまるっと解決。

参考:RESTfulなAPIの設計を学ぼう @IT

参考:RESTとRailsスタイル @SlideShere

参考:RESTful Web サービスの基本 @IBMdeveloperWorks

今北産業ってかたは

httpのステータスコードを有効に活用する方が
シンプルに作れるルールがきちんと決まってるんだから、
それを利用しようじゃないか!

というような感じです。
補足するなら、

RESTfulにするために抑えておくポイント

図1 顧客APIコントローラ・クラスが定義するAPI @IT

基本的にはこういう風に設定する。ということっぽいですね。
HTTPメソッドとして、

何かデータを取得するAPIならGET

APIを通じてデータの更新をするときはPUT

[追記 : Yahagi様のコメントより]
Railsでは更新にはPATCHを扱うようです。勉強不足でした...!

データの追加はPOST

削除はDELETEのようにすることを心がけてAPIを作る事が

RESTfulにする方法です。

こうしてみるとすごく簡単ですね。

僕が作ったAPI(悪い例)

しかし、そんな簡単な事も知らないでAPIを初心者が作るとどうなるか。
凄いGET天国になります☆(というかGetとPostしか無い。)

...まぁ思いましたよ。
postとかputもあるのにgetだけで動かして果たして良いのかと。
でもGETにしとけば全部動くからいいかなって思って...(´;ω;`)(猛省)

というのも僕のような初心者が前提知識なしにAPI等に取り組むと下記のような症状が出ます。

  • ステータスコード?なにそれ!

残念ながら僕は数カ月前までは知りませんでした...。
知らぬは一時の恥なのでバンバン晒していきますよー。

  • HTTPメソッド?何が違うの?

ステータスコードを知らないので優位性が分からないのです('A`)

  • getで適当にtrue,false返しておけば判断できるでしょう!

ステータスコードで可否が判断できないからそういうことをしてしまうのです('A`)
別にそれが絶対悪(例えば、複雑な判定結果をどうしても渡したい時とか)ってわけじゃないんですが
ただ単純に可否だけ見たいならステータスコードを返すだけで、無駄な通信を発生させずに
済むわけです。

RESTfulなAPIにする。

RESTfulなAPIにする。ということは
言い換えればAPI一つ一つにきちんとした役割を設定するということです。

所謂、「状態」で挙動が変化しないAPIを作るため必要です。(ステートレスなAPI)

明示的にhttpメソッドを使うことで
httpの本来持つステータス・コードを有効に活用することができるし、
利用法が明示的になるので、メソッドの種類でおおよその動きがわかります。

さらにコンテンツタイプもしっかり明示できたら、これほど明示的なAPIはないですね!

だから、皆RESTfulなAPIづくりを頑張るんですね。

稚魚エンジニアがまた一歩成長しました。

自分から見つける技術ってかなり幅が狭いです。
やはり人との繋がりは大事ですね!

ここまで調べると逆にRESTfulだとあまり良くない(不適切)例。というのが気になりますね。
ちょっと調べてみますか....このへんの話はまた機会を見て(僕も勉強が足りないので)

[追記 : miyabisun様より]
少しずつですが『Web を支える技術』を読んでいます @Programming log - Shindo200
このかたの解説が参考になるらしいです。僕もすぐ読んで勉強してきます(`・ω・´)

それはであであ。

mmusasabi
(*´д`*)パッション!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away