Overview
Here is a simple guideline to create a simple API with RoR5. In this post, I'll create a simple blog like application that users can read, create, update and delete posts on.
The complete code is available here
Table of contents
- Create the application
- Create the controller and model for Post
- Set up Routes with namespaces
- Set up the Post controller
- Test the api using postman
Overview
Here is a simple guideline to create a simple API with RoR5. In this post, I'll create a simple blog like application that users can read, create, update and delete posts on.
Create the application
You can make an API-only RoR application by just adding --api
at the end of rails new
command.
$ rails new blog --api
Create the controller and model for Post
You can generate the Post Controller
and Post Model
by running commands below.
$ rails g model post title:string
$ rails g controller posts
$ rake db:migrate
Set up Routes with namespaces
Namespaces
enable you to easily control the version of your API.
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
resources :posts
end
end
end
The code above creates routes like this. (You can check the routes of your application with rake routes
command.)
$ rake routes
api_v1_posts GET /api/v1/posts(.:format) api/v1/posts#index
POST /api/v1/posts(.:format) api/v1/posts#create
api_v1_post GET /api/v1/posts/:id(.:format) api/v1/posts#show
PATCH /api/v1/posts/:id(.:format) api/v1/posts#update
PUT /api/v1/posts/:id(.:format) api/v1/posts#update
DELETE /api/v1/posts/:id(.:format) api/v1/posts#destroy
Set up the Post controller.
Create the api
and v1
directories under your controllers directory. Your controllers directory should look like this.
---- controllers
--- api
-- v1
- posts_controller.rb
Create methods for getting, creating, updating and deleting posts like the code below.
module Api
module V1
class PostsController < ApplicationController
def index
posts = Post.order(created_at: :desc)
render json: { status: 'SUCCESS', message: 'loaded posts', data: posts }
end
def show
post = Post.find(params[:id])
render json: { status: 'SUCCESS', message: 'loaded the post', data: post }
end
def create
post = Post.new(post_params)
if post.save
render json: { status: 'SUCCESS', message: 'loaded the post', data: post }
else
render json: { status: 'ERROR', message: 'post not saved', data: post.errors }
end
end
def destroy
post = Post.find(params[:id])
post.destroy
render json: { status: 'SUCCESS', message: 'deleted the post', data: post }
end
def update
post = Post.find(params[:id])
if post.update(post_params)
render json: { status: 'SUCCESS', message: 'updated the post', data: post }
else
render json: { status: 'SUCCESS', message: 'loaded the post', data: post }
end
end
private
def post_params
params.require(:post).permit(:title)
end
end
end
end
Test the api using postman
Let's create some data we can play with on rails console
.
$ rails c
2.4.4 :001 > Post.create(title:'title1')
2.4.4 :001 > Post.create(title:'title2')
Next, Run the api!
$ rails s
Open postman and test the following requests.
Get(http://localhost:3000/api/v1/posts)
You can retrieve 2 sets of data you have created on the console.
GET(http://localhost:3000/api/v1/posts/:id)
You can retrieve one specific data that has id = 1
.
POST (http://localhost:3000/api/v1/posts)
Let's create data!
When you create data, you have to send a POST
request.
So change the selected option in the box on the right from GET
to POST
and pass json data in the body.
PUT(http://localhost:3000/api/v1/posts/:id)
Let's Update data!
Change the selected option to PUT
and pass json data.
DELETE(http://localhost:3000/api/v1/posts/:id)
Lastly, let's try to delete data.
Change the selected option to DELETE
and pass json data.
I've usded postman
in this post, but you can of course use curl command to do the same.
Top comments (1)
Such this is very nice article word unscramble it is latest and great puzzle game online.