Postmanを使ってAPIの確認をしてみる

Postmanを使ってAPIモードで作成したアプリにアクセスしてみた。
(業務でAPIとPostmanを使ったので、自身のメモとして記載)

###環境
Mac　High Sierra
ruby 2.5.1
Rails 5.2.1

#実施したこと
・todoアプリをAPIモードで作成する
・Postmanを使ってクライアントからアクセスし、データの登録、更新を行う
**最低限の機能ってことで、CRUD機能だけ搭載**

#1.rails new
rails newに`--api`を付けて、APIモードとして作成する

```bash:console
$ rails new todo --api
```

#2.modelの用意、マイグレーション

```bash:console
$ rails g model task title:string description:text
$ rails db:migrate
```

#3.modelの設定、バリデーション

```ruby:app/models/task.rb
class Task < ApplicationRecord
  validates :title, presence: true
  validates :description, presence: true
end
```

#4.ルーティング設定
APIでバージョン管理をさせるため、バージョンで空間を分けるようにしておく

```ruby:config/routes.rb
Rails.application.routes.draw do
  namespace :api do
    namespace :v1, format: :json do
      resources :tasks
    end
  end
end
```

#5.コントトーラの設定
ルーティングで設定した空間に合わせたディレクトリ構成で設定する

```
# ディレクトリ構成イメージ
app
 |_controllers
   |_api
     |_vi
       |_tasks_controller.rb
```

```bash:console
$ rails g controller api::v1::tasks
```

```ruby:app/cotrollers/api/v1/tasks_controller.rb
class Api::V1::TasksController < ApplicationController
  before_action :set_task, only: [:show, :update, :destroy]

  # GET api/vi/tasks/
  def index
    @tasks = Task.all
    render json: { status: 'success', data: @tasks }
  end

  # GET api/vi/tasks/:id
  def show
    render json: { status: 'success', data: @task }
  end

  # Post api/vi/tasks
  def create
    @task = Task.new(task_params)
    if @task.save
      render json: { status: 'success', data: @task }
    else
      render json: { status: 'error', data: @task.errors }
    end
  end

  # Put api/vi/tasks/:id
  def update
    if @task.update(task_params)
      render json: { status: 'success', data: @task }
    else
      render json: { status: 'error', data: @task.errors }
    end
  end

  # Delete api/vi/tasks/:id
  def destroy
    @task.destroy
    render json: { status: 'success', data: @task }
  end

  private
  def task_params
    params.require(:task).permit(:title, :description)
  end

  def set_task
    @task = Task.find(params[:id])
  end
end
```

#6.Postmanを使ってリクエスト、レスポンスの確認
[Postman](https://www.getpostman.com/)

## 6-1.Postmanを起動
Postmanを開く


## 6-2.ローカルサーバー起動
```bash:console
$ rails s
```

## 6-3.データのPost(create)
Bodyに登録するデータをJSON形式で設定して、実行する

### パラメータ
メソッド：Post
URL：http://localhost:3000/api/v1/tasks
Body:raw JSON(application/json)

```json:Body
{
  "title": "サンプル",
  "description": "サンプル説明"
}
```
<img width="779" alt="スクリーンショット 2019-04-02 1.26.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/248644/3d3d59d0-039a-b6e0-92f8-c05fe3e92837.png">

## 6-4.データのPut(update)
登録した情報を更新する
Body要素に変更する情報を設定する

### パラメータ
メソッド：Put
URL：http://localhost:3000/api/v1/tasks/:id
　　　(:idはdbに登録されているid値　ここでは1を設定)
Body:raw JSON(application/json)

```json:Body
{
  "title": "サンプル2"
}
```

<img width="781" alt="スクリーンショット 2019-04-02 1.26.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/248644/097c8e4b-0968-13ef-857f-da0ce492ad33.png">

## 6-5.データのDelete(destroy)
登録している情報を削除する

### パラメータ
メソッド：Delete
URL：http://localhost:3000/api/v1/tasks/:id
　　　(:idはdbに登録されているid値　ここでは1を設定)

<img width="779" alt="スクリーンショット 2019-04-02 1.27.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/248644/3841541f-5322-b97d-31be-54b511b3d9fa.png">


## 6-7.データのGet(index)
登録した情報をすべて取得する

6-3.データのPostの操作でデータをいくつか登録しておく
(画像では2つデータを登録した)

### パラメータ
メソッド：Get
URL：http://localhost:3000/api/v1/tasks

<img width="777" alt="スクリーンショット 2019-04-02 1.28.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/248644/5bfc1828-55bb-e3ee-c6e5-def816503a60.png">

## 6-5.データのGet(show)
登録した情報からidを指定して、特定の情報のみを取得する

### パラメータ
メソッド：Get
URL：http://localhost:3000/api/v1/tasks/:id
　　　(:idはdbに登録されているid値　ここでは2を設定)

<img width="779" alt="スクリーンショット 2019-04-02 1.29.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/248644/db824747-f499-5bd8-6c3f-5611acf7a9f1.png">

簡単な動きはこれで確認ができた。