{"id":24659,"date":"2019-08-07T12:14:04","date_gmt":"2019-08-07T09:14:04","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=24659"},"modified":"2019-08-07T12:25:04","modified_gmt":"2019-08-07T09:25:04","slug":"developer-series-spinning-json-api","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/","title":{"rendered":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes"},"content":{"rendered":"\n<p>Welcome to the first of four Ruby on Rails Developer Series. In this series, the goal is to outline how to strengthen your API with Postgres, how to dockerize your project and add security layers to mitigate attacks to your application. In this article, we\u2019ll cycle through building a quick API-only application uses the JSON API from Active Model Serializer. Then construct a basic CRUD Controller API example on retrieving the User information. While the process is outlined and best practices are used. The goal of the series is to make you feel confident as an engineer in building a structured project with Ruby on Rails.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Let\u2019s Begin<\/h2>\n\n\n\n<p>Let\u2019s start off by using the <code>--api<\/code> command in the console to provision an api only preset.<\/p>\n\n\n\n<p><code>rails new rails-json-api-test --api<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">This will generate the following:<\/h2>\n\n\n\n<div>\n<div id=\"highlighter_436045\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">app\/controllers<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php plain\">app\/assets<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"php plain\">app\/helpers<\/code><\/div>\n<div class=\"line number6 index5 alt1\">&nbsp;<\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"php plain\">app\/models<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"php plain\">config<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Objective CRUD<\/h2>\n\n\n\n<p>Our goal is to use the ActiveModel::Serializer \u2013 JSON API \u2013 which is included by default in your Gemfile when you create an application using the <code>--api<\/code> directive. We will then work toward spinning up a basic CRUD endpoint for a user.<\/p>\n\n\n\n<p>Below is the endpoint we plan to implement and http methods we plan to send to the API.<\/p>\n\n\n\n<p>Path: <code>\/api\/v1\/users<\/code><\/p>\n\n\n\n<div>\n<div id=\"highlighter_296891\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">GET<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php plain\">POST<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php plain\">PUT<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"php functions\">DELETE<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Next, we need to generate the basic User Model that we want to create using the rails generate command for Models:<\/p>\n\n\n\n<p>First, we need to set up our database. In this example, we will be using PG (Postgres) and will set up the minimum requirement to allow us to proceed to build our API and come back to this in the next article.<\/p>\n\n\n\n<p><code>gem pg<\/code><\/p>\n\n\n\n<p>Then we need to set up our <code>database.yml<\/code> file<\/p>\n\n\n\n<div>\n<div id=\"highlighter_496548\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php keyword\">default<\/code><code class=\"php plain\">: &amp;<\/code><code class=\"php keyword\">default<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">adapter: postgresql<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">host: localhost<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">port: 5432<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">encoding: utf8<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">pool: 5<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">database: rails-json-api<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">username: development<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">password: development<\/code><\/div>\n<div class=\"line number10 index9 alt1\">&nbsp;<\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"php plain\">development: &amp;<\/code><code class=\"php keyword\">default<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">adapter: postgresql<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">host: localhost<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">port: 5432<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">encoding: utf8<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">pool: 5<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">database: rails-json-api-dev<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">username: development<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">password: development<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Then we\u2019re ready to create the database and build our table.<\/p>\n\n\n\n<p><code>rake db:create<\/code><\/p>\n\n\n\n<p><code>rails g model User first_name:string last_name:string email:string<\/code><\/p>\n\n\n\n<p>That should generate something like this:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_548890\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">invoke&nbsp; active_record<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">create&nbsp;&nbsp;&nbsp; db\/migrate\/20190521020122_create_users.rb<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">create&nbsp;&nbsp;&nbsp; app\/models\/user.rb<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">invoke&nbsp;&nbsp;&nbsp; test_unit<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">create&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test\/models\/user_test.rb<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">create&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test\/fixtures\/users.yml<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Now let\u2019s work on the serializer side of things of how the API will respond to the request.<\/p>\n\n\n\n<p>We will want to uncheck this in the gemfile:<\/p>\n\n\n\n<p><code>gem 'active_model_serializers', '~&gt; 0.10.0'<\/code><\/p>\n\n\n\n<p>When we make the controller we will need the namespaces to be setup:<\/p>\n\n\n\n<p>For the namespace to change from<code>Api::V1::UsersController<\/code> to <code>API::V1:UsersController<\/code> we need to modify the inflection file which was generated in <code>config\/initializers\/inflections.rb<\/code>. We will then need to uncomment and add this to the file:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_319570\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">ActiveSupport::Inflector.inflections(:en) <\/code><code class=\"php keyword\">do<\/code> <code class=\"php plain\">|inflect|<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">inflect.acronym <\/code><code class=\"php string\">'API'<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php functions\">end<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>Lock down your routes to <code>ONLY ALLOW<\/code> these method requests.<\/p>\n\n\n\n<div>\n<div id=\"highlighter_141172\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">Rails.application.routes.draw <\/code><code class=\"php keyword\">do<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php keyword\">namespace<\/code> <code class=\"php plain\">:api, path: <\/code><code class=\"php string\">''<\/code> <code class=\"php keyword\">do<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php keyword\">namespace<\/code> <code class=\"php plain\">:v1 <\/code><code class=\"php keyword\">do<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">resources :users, only: [:index, :show, :create, :update, :destroy]<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"php functions\">end<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<p>This is what our controller looks like to be able to support our methods:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_755659\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php keyword\">class<\/code> <code class=\"php plain\">API::V1::UsersController &lt; ApplicationController<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">rescue_from ActiveRecord::RecordNotFound, with: :record_not_found<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def index<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">users = User.all<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: users, each_serializer: UserSerializer, adapter: :json_api, status: 200<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def show<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">user = User.find(params[:id])<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: user, serializer: UserSerializer, adapter: :json_api, status: 200<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number13 index12 alt2\">&nbsp;<\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def create<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">user = User.<\/code><code class=\"php keyword\">new<\/code><code class=\"php plain\">(user_params)<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: user, serializer: UserSerializer, adapter: :json_api, status: 200 <\/code><code class=\"php keyword\">if<\/code> <code class=\"php plain\">user.save!<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number18 index17 alt1\">&nbsp;<\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def update<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">user = User.find(params[:id])<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: user, serializer: UserSerializer, adapter: :json_api, status: 200 <\/code><code class=\"php keyword\">if<\/code> <code class=\"php plain\">user.update(user_params)<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number23 index22 alt2\">&nbsp;<\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def destroy<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">user = User.find(params[:id])<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: user, serializer: UserSerializer, adapter: :json_api, status: 200 <\/code><code class=\"php keyword\">if<\/code> <code class=\"php plain\">user.destroy!<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number28 index27 alt1\">&nbsp;<\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php keyword\">private<\/code><\/div>\n<div class=\"line number30 index29 alt1\">&nbsp;<\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php plain\">def record_not_found<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"php spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"php plain\">render json: { message: <\/code><code class=\"php string\">'Record Not Found!'<\/code><code class=\"php plain\">}, adapter: :json_api, status: 404<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"php spaces\">&nbsp;&nbsp;<\/code><code class=\"php functions\">end<\/code><\/div>\n<div class=\"line number34 index33 alt1\">&nbsp;<\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"php functions\">end<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Responding with JSON<\/h2>\n\n\n\n<p>JSON API is a format that works to optimize http(s) requests mainly to promote more productivity and efficiency. JSON API comes with strong caching functionality as data changes affect fewer resources.<\/p>\n\n\n\n<p>You can simply add this to the Serializer to implement basic key-based cache expiration:<\/p>\n\n\n\n<div>\n<div id=\"highlighter_246753\" class=\"syntaxhighlighter  php\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"php plain\">cache key: <\/code><code class=\"php string\">'user'<\/code><code class=\"php plain\">, expires_in: 3.hours<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"480\" height=\"360\" src=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2019\/08\/giphy.gif\" alt=\"\" class=\"wp-image-24663\"\/><\/figure><\/div>\n\n\n\n<p>We have just spun up a JSON API in a few minutes for our User Table. We have left some items for the next part of the series to strengthen our API-based application. In the next article, we will further work on building a strong JSON API and using Postgres to your advantage.<\/p>\n\n\n\n<p>This project is available on my repo <a href=\"https:\/\/github.com\/EvanGlazer\/codeship-rails-series\/tree\/feature\/spinning-up-quick-api\">here<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Additional resources<\/h2>\n\n\n\n<ol class=\"wp-block-list\"><li>Learn how to tame the <a href=\"https:\/\/www.cloudbees.com\/blog\/taming-jenkins-json-api-depth-and-tree\">Jenkins JSON API<\/a> with Depth and \u201cTree.\u201d<\/li><li>How do JSON and XML compare? <a href=\"https:\/\/blog.codeship.com\/json-and-xml-how-do-they-compare\/\">Find out here<\/a>.<\/li><li>Discover <a href=\"https:\/\/blog.codeship.com\/json-schemas-role-in-building-and-deploying-your-api\/\">what JSON Schema is<\/a> and what role it plays.<\/li><\/ol>\n\n\n\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Web Code Geeks with permission by Evan Glazer, partner at our <a href=\"\/\/www.webcodegeeks.com\/join-us\/wcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">WCG program<\/a>. See the original article here: <a href=\"https:\/\/blog.codeship.com\/ror-developer-series-spinning-up-a-json-api-in-minutes\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes<\/a><\/p>\n<p>Opinions expressed by Web Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Welcome to the first of four Ruby on Rails Developer Series. In this series, the goal is to outline how to strengthen your API with Postgres, how to dockerize your project and add security layers to mitigate attacks to your application. In this article, we\u2019ll cycle through building a quick API-only application uses the JSON &hellip;<\/p>\n","protected":false},"author":10271,"featured_media":921,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[40,95],"class_list":["post-24659","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby","tag-json","tag-rails"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-07T09:14:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-07T09:25:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Evan Glazer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@evan_glazer\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Evan Glazer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\"},\"author\":{\"name\":\"Evan Glazer\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/99389fa5af3bc43e693c41e0d63e8329\"},\"headline\":\"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes\",\"datePublished\":\"2019-08-07T09:14:04+00:00\",\"dateModified\":\"2019-08-07T09:25:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\"},\"wordCount\":586,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg\",\"keywords\":[\"JSON\",\"Rails\"],\"articleSection\":[\"Ruby\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\",\"name\":\"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg\",\"datePublished\":\"2019-08-07T09:14:04+00:00\",\"dateModified\":\"2019-08-07T09:25:04+00:00\",\"description\":\"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/ruby\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/99389fa5af3bc43e693c41e0d63e8329\",\"name\":\"Evan Glazer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d682081fa7ff1813f66b9c2d06e8476ca6f3b6956f15f8e38d6fcc6b89292fcd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d682081fa7ff1813f66b9c2d06e8476ca6f3b6956f15f8e38d6fcc6b89292fcd?s=96&d=mm&r=g\",\"caption\":\"Evan Glazer\"},\"description\":\"Evan Glazer is a software engineer and self-starter at Edukate, where he uses Ember and Ruby on Rails and works with natural language processing and machine learning.\",\"sameAs\":[\"https:\/\/blog.codeship.com\",\"https:\/\/x.com\/evan_glazer\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/evan-glazer\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026","description":"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/","og_locale":"en_US","og_type":"article","og_title":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026","og_description":"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API","og_url":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2019-08-07T09:14:04+00:00","article_modified_time":"2019-08-07T09:25:04+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg","type":"image\/jpeg"}],"author":"Evan Glazer","twitter_card":"summary_large_image","twitter_creator":"@evan_glazer","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Evan Glazer","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/"},"author":{"name":"Evan Glazer","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/99389fa5af3bc43e693c41e0d63e8329"},"headline":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes","datePublished":"2019-08-07T09:14:04+00:00","dateModified":"2019-08-07T09:25:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/"},"wordCount":586,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg","keywords":["JSON","Rails"],"articleSection":["Ruby"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/","url":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/","name":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg","datePublished":"2019-08-07T09:14:04+00:00","dateModified":"2019-08-07T09:25:04+00:00","description":"Interested to learn about Spinning Up a JSON API? Check our article cycle through building a quick API-only application uses the JSON API","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/json-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/ruby\/developer-series-spinning-json-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Ruby","item":"https:\/\/www.webcodegeeks.com\/category\/ruby\/"},{"@type":"ListItem","position":3,"name":"Ruby on Rails Developer Series: Spinning Up a JSON API in Minutes"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/99389fa5af3bc43e693c41e0d63e8329","name":"Evan Glazer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d682081fa7ff1813f66b9c2d06e8476ca6f3b6956f15f8e38d6fcc6b89292fcd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d682081fa7ff1813f66b9c2d06e8476ca6f3b6956f15f8e38d6fcc6b89292fcd?s=96&d=mm&r=g","caption":"Evan Glazer"},"description":"Evan Glazer is a software engineer and self-starter at Edukate, where he uses Ember and Ruby on Rails and works with natural language processing and machine learning.","sameAs":["https:\/\/blog.codeship.com","https:\/\/x.com\/evan_glazer"],"url":"https:\/\/www.webcodegeeks.com\/author\/evan-glazer\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/24659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/10271"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=24659"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/24659\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/921"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=24659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=24659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=24659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}