Ruby on Rails 5.2 - ActionController::API

क्लास एक्शनकंट्रोलर :: एपीआई




ruby

क्लास एक्शनकंट्रोलर :: एपीआई

जनक:
धातु

API नियंत्रक ActionController::Base का एक हल्का संस्करण है, जो उन अनुप्रयोगों के लिए बनाया गया है, जिन्हें उन सभी कार्यात्मकताओं की आवश्यकता नहीं होती है, जो एक पूर्ण रेल नियंत्रक प्रदान करता है, जिससे आपको केवल उन सुविधाओं के साथ नियंत्रक बनाने की अनुमति मिलती है जिनकी आपको केवल API लिए आवेदन की आवश्यकता होती है।

एक API नियंत्रक इस अर्थ में एक सामान्य नियंत्रक से भिन्न होता है कि डिफ़ॉल्ट रूप से इसमें कई विशेषताएं शामिल नहीं होती हैं जो आमतौर पर केवल ब्राउज़र एक्सेस द्वारा आवश्यक होती हैं: लेआउट और टेम्पलेट रेंडरिंग, कुकीज़, सत्र, फ्लैश, संपत्ति, और इसी तरह। यह पूरे नियंत्रक स्टैक को पतला बनाता है, API अनुप्रयोगों के लिए उपयुक्त है। इसका मतलब यह नहीं है कि यदि आपके पास उनकी आवश्यकता है तो ऐसी विशेषताएं नहीं होंगी: वे सभी आपके लिए अपने आवेदन में शामिल करने के लिए उपलब्ध हैं, वे डिफ़ॉल्ट API नियंत्रक स्टैक का हिस्सा नहीं हैं।

सामान्यतया, ApplicationController एकमात्र नियंत्रक है जो ActionController::API से विरासत में मिला ActionController::API । बदले में अन्य सभी नियंत्रक ApplicationController से विरासत में मिलते हैं।

एक नमूना नियंत्रक इस तरह दिख सकता है:

class PostsController < ApplicationController
  def index
    posts = Post.all
    render json: posts
  end
end

अनुरोध, प्रतिक्रिया और पैरामीटर ऑब्जेक्ट सभी ठीक उसी तरह से काम करते हैं जैसे ActionController::Base

renders

डिफ़ॉल्ट API नियंत्रक स्टैक में सभी रेंडरर्स शामिल हैं, जिसका अर्थ है कि आप अपने नियंत्रकों में स्वतंत्र रूप से render :json और भाइयों का उपयोग कर सकते हैं। ध्यान रखें कि टेम्प्लेट रेंडर नहीं होने जा रहे हैं, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आपका कंट्रोलर सभी कार्यों में render या redirect_to को कॉल कर रहा है, अन्यथा यह 204 नो कंटेंट को लौटा देगा।

def show
  post = Post.find(params[:id])
  render json: post
end

पुनर्निर्देश

रीडायरेक्ट का उपयोग एक क्रिया से दूसरे में जाने के लिए किया जाता है। आप अपने नियंत्रकों में उसी तरह ActionController::Base पद्धति का उपयोग कर सकते हैं जैसे कि ActionController::Base । उदाहरण के लिए:

def create
  redirect_to root_url and return if not_authorized?
  # do stuff here
end

नया व्यवहार जोड़ना

कुछ परिदृश्यों में आप ActionController::Base द्वारा प्रदान की गई कार्यक्षमता को वापस जोड़ना चाह सकते हैं, जो ActionController::API में डिफ़ॉल्ट रूप से मौजूद नहीं ActionController::API , उदाहरण के लिए MimeResponds । यह मॉड्यूल आपको respond_to विधि देता है। इसे जोड़ना काफी सरल है, आपको केवल एक विशिष्ट नियंत्रक में मॉड्यूल को शामिल करने की आवश्यकता है या यदि आप इसे अपने पूरे आवेदन में उपलब्ध चाहते हैं, तो ApplicationController में:

class ApplicationController < ActionController::API
  include ActionController::MimeResponds
end

class PostsController < ApplicationController
  def index
    posts = Post.all

    respond_to do |format|
      format.json { render json: posts }
      format.xml  { render xml: posts }
    end
  end
end

ActionController::Base में शामिल मॉड्यूल की जांच करना सुनिश्चित करें यदि आप किसी अन्य कार्यक्षमता का उपयोग करना चाहते हैं जो ActionController::API द्वारा उपलब्ध नहीं है ActionController::API बॉक्स से बाहर।

स्थिरांक

मॉड्यूल

पब्लिक क्लास के तरीके

बिना_मॉड्यूल (* मॉड्यूल) स्रोत दिखाएं
# File actionpack/lib/action_controller/api.rb, line 104
def self.without_modules(*modules)
  modules = modules.map do |m|
    m.is_a?(Symbol) ? ActionController.const_get(m) : m
  end

  MODULES - modules
end

शार्टकट हेल्पर जो सभी API मॉड्यूल लौटाता है, सिवाय तर्क के रूप में पारित किए गए लोगों को छोड़कर:

class MyAPIBaseController < ActionController::Metal
  ActionController::API.without_modules(:ForceSSL, :UrlFor).each do |left|
    include left
  end
end

यह उस चीज़ पर बेहतर नियंत्रण देता है जिसे आप बाहर करना चाहते हैं और मैन्युअल रूप से आवश्यक मॉड्यूल को सूचीबद्ध करने के बजाय API नियंत्रक वर्ग बनाना आसान बनाता है।