Как использовать некоторые методы Rails 4 App, такие как REST API - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужна ваша помощь, пожалуйста!

У меня есть приложение на Rails 4, и мне нужно использовать некоторые методы (не все), чтобы реагировать как REST API на мобильные устройства.Я использую модель has_secure_password для аутентификации пользователей, и protect_from_forgery с:: reset_session для защиты приложения от CSRF-атак (только в почтовых запросах).

Теперь я работаю в мобильном приложении, которое должно потреблятьнекоторые методы моего приложения на Rails 4, и я немного озадачен тем, какие изменения мне нужно сделать, чтобы приложение могло реагировать на запросы устройств, такие как REST API.

С уважением,

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Это не должно быть слишком сложно.Я бы, вероятно, поместил эти маршруты мобильного API в их собственное пространство имен, чтобы помочь с организацией.Обычно для каждой таблицы, с которой взаимодействует ваше мобильное приложение, у вас будет отдельный контроллер.

Ниже приведен пример шаблона, который я использую, когда мне нужен новый контроллер REST.Надеюсь, это вам поможет.

# -------------------------------------------------------------------------------------
#    ___                      ___          _
#   / __\___  _ __  _   _    / _ \__ _ ___| |_ __ _
#  / /  / _ \| '_ \| | | |  / /_)/ _` / __| __/ _` |
# / /__| (_) | |_) | |_| | / ___/ (_| \__ \ || (_| |
# \____/\___/| .__/ \__, | \/    \__,_|___/\__\__,_|
#            |_|    |___/
# -------------------------------------------------------------------------------------
# This is a template controller which represents what most admin controllers look like.
# -------------------------------------------------------------------------------------
# Search for Camel and replace it with your camel case object (i.e. User)
# Search for snake and replace it with your snake case object (i.e. user)
# When search/replacting be sure to not include the 's'. This will handle plural/singular
# -------------------------------------------------------------------------------------
module V1
  module Admin
    class CamelsController < ApplicationController

      # GET /admin/snakes
      def index
        if admin_can :snake_read
          render json: Camel.all, each_serializer: Adm::CamelSerializer
        end
      end

      # GET /admin/snakes/:id
      def show
        if admin_can :snake_read
          render json: @snake, serializer: Adm::CamelSerializer
        end
      end

      # POST /admin/snakes
      def create
        if admin_can :snake_create
          @snake = Camel.new(snake_params.merge!(creator: current_user))

          if @snake.save
            render json: @snake, serializer: Adm::CamelSerializer, status: :created
          else
            render json: { errors: @snake.errors }, status: :unprocessable_entity
          end
        end
      end

      # GET /admin/snakes/new
      def new
        if admin_can :snake_create
          render json: Camel.new, new: true, serializer: Adm::CamelSerializer, root: "snake"
        end
      end

      # GET /admin/snakes/:id/edit
      def edit
        if admin_can :snake_update
          render json: @snake, edit: true, snake_id: params[:id], serializer: Adm::CamelSerializer, root: "snake"
        end
      end

      # PATCH /admin/snakes/:id
      def update
        if admin_can :snake_update
          if @snake.update(snake_params)
            head :no_content
          else
            render json: { errors: @snake.errors }, status: :unprocessable_entity
          end
        end
      end

      # DELETE /admin/snakes/:id
      def destroy
        if admin_can :snake_delete
          @snake.destroy
          head :no_content
        end
      end

      private
      def snake_params
        params.require(:snake).permit(:name).merge!(updater: current_user)
      end

    end
  end
end

В этом примере предполагается, что вы используете Active Model Serializer, который значительно упрощает рендеринг JSON.https://github.com/rails-api/active_model_serializers

0 голосов
/ 13 ноября 2018

возможно, вам следует разделить маршруты, которые будут использоваться вашим мобильным приложением.как

api/v1/<controller>/<methods>/

В этом контроллере вы можете применить свою безопасность как oauth и иметь различные маршруты, которые отвечают как json.Я хотел бы, чтобы у вас была логика, отделяющая вас от сети и мобильного телефона.

MyApp::Application.routes.draw do
  # normal_routes
  ...
  namespace :api, constraints: { format: 'json' } do  
    namespace :v1 do  
      resources :posts  
    end  
  end  
end

вы можете увидеть этот драгоценный камень виноград

...