Skip to main content

Getting Started with Ruby

This integration guide follows the Quick Start Guide and assumes you have you have fully completed the "Hands-on" path. You should be able to consume the API by browsing the URL http://localhost:1337/api/restaurants.

If you haven't gone through the Quick Start Guide, the way you request a Strapi API with Ruby remains the same except that you do not fetch the same content.

Create a Ruby file​

Be sure to have Ruby installed on your computer.

mkdir ruby-app && cd ruby-app
touch script.rb

Use an HTTP client​

Many HTTP clients are available but in this documentation we'll use HTTParty.

  • Create a Gemfile containing the following:
source "https://rubygems.org"

gem "httparty"
  • Install your gems by running the following command:
bundle install

GET Request your collection type​

Execute a GET request on the restaurant collection type in order to fetch all your restaurants.

Be sure that you activated the find permission for the restaurant collection type.

HTTParty.get('http://localhost:1337/api/restaurants/')
{
"data": [
{
"id": 1,
"attributes": {
"name": "Biscotte Restaurant",
"description": "Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.",
"createdAt": "2022-07-31T11:57:01.330Z",
"updatedAt": "2022-07-31T11:57:44.945Z",
"publishedAt": "2022-07-31T11:57:44.943Z"
}
}
],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 1,
"total": 1
}
}
}

Example​

require 'httparty'

class Restaurant
include HTTParty
base_uri 'http://localhost:1337/api'

def all
self.class.get('/restaurants')
end
end

restaurant = Restaurant.new
puts restaurant.all

POST Request your collection type​

Execute a POST request on the restaurant collection type in order to create a restaurant.

Be sure that you activated the create permission for the restaurant collection type and the find permission for the category Collection type. Add the ?populate=categories query parameter to return the categories with the response.

In this example a japanese category has been created which has the id: 3.

HTTParty.post(
'http://localhost:1337/api/restaurants/',
body: {
data: {
name: 'Dolemon Sushi',
description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
categories: [3]
}
},
header: {
'Content-Type': 'application/json'
},
query: {
'populate': 'categories'
}
)
{
"data": {
"id": 2,
"attributes": {
"name": "Dolemon Sushi",
"description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
"createdAt": "2022-07-31T18:29:58.876Z",
"updatedAt": "2022-07-31T18:29:58.876Z",
"publishedAt": "2022-07-31T18:29:58.875Z",
"categories": {
"data": [
{
"id": 3,
"attributes": {
"name": "japanese",
"createdAt": "2022-07-31T11:57:35.040Z",
"updatedAt": "2022-07-31T11:57:35.631Z",
"publishedAt": "2022-07-31T11:57:35.629Z"
}
}
]
}
}
},
"meta": {}
}

Example​

require 'httparty'

class Restaurant
include HTTParty
base_uri 'http://localhost:1337/api'

def initialize
@options = {
header: { 'Content-Type': 'application/json' },
query: { 'populate': 'categories' }
}
end

def all
self.class.get('/restaurants')
end

def create(params)
@options[:body] = {
data: {
name: params[:name],
description: params[:description],
categories: params[:categories]
}
}

self.class.post('/restaurants', @options)
end
end

restaurant = Restaurant.new
puts restaurant.create({
name: 'Dolemon Sushi',
description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
categories: [3]
})

PUT Request your collection type​

Execute a PUT request on the restaurant collection type in order to update the category of a restaurant.

Be sure that you activated the put permission for the restaurant collection type. Add the ?populate=categories query parameter to return the categories with the response.

HTTParty.put(
'http://localhost:1337/api/restaurants/2',
body: {
data: {
categories: [2]
}
},
header: {
'Content-Type': 'application/json'
},
query: {
'populate': 'categories'
}
)
{
"data": {
"id": 2,
"attributes": {
"name": "Dolemon Sushi",
"description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
"createdAt": "2022-07-31T18:15:09.290Z",
"updatedAt": "2022-07-31T18:16:53.448Z",
"publishedAt": "2022-07-31T18:15:09.289Z",
"categories": {
"data": [
{
"id": 2,
"attributes": {
"name": "Brunch",
"createdAt": "2022-07-31T11:57:23.472Z",
"updatedAt": "2022-07-31T11:57:25.180Z",
"publishedAt": "2022-07-31T11:57:25.179Z"
}
}
]
}
}
},
"meta": {}
}

Example​

require 'httparty'

class Restaurant
include HTTParty
base_uri 'http://localhost:1337/api'

def initialize
@options = {
header: { 'Content-Type': 'application/json' },
query: { 'populate': 'categories' }
}
end

def all
self.class.get('/restaurants')
end

def create(params)
@options[:body] = {
data: {
name: params[:name],
description: params[:description],
categories: params[:categories]
}
}

self.class.post('/restaurants', @options)
end

def update(id, params)
@options[:body] = {
data: {
categories: params[:categories]
}
}
self.class.put("/restaurants/#{id}", @options)
end
end

restaurant = Restaurant.new
puts restaurant.update(16, { categories: [2] })