2016-07-27 46 views
0

我是新来的Web服务和Rails了。我有使用rails 5创建API的疑问。如何为rails 5应用程序创建API?我可以在API中找到一些教程使用rails 5的应用程序。但是我需要在单个rails 5应用程序中使用API​​和视图。我应该怎么做?如何在rails 5中创建API?

+3

'轨新my_api --api'命令来创建新的API只应用。如果你需要api和视图,创建一个普通的应用程序(不用api模式),然后在你的控制器方法中渲染jsons/views – AndreyS

+1

你有点困惑。仅限于Api的模式专门用于api-only应用程序,它不使用视图,也不需要加载未使用代码的开销。你完全可以在普通的rails应用程序中创建api端点。基本上,一个API端点是一个控制器动作,呈现json而不是html。而已。 –

+0

谢谢@SergioTulentsev。但我应该如何配置API的路线? – poombavai

回答

0

您可以创建一个新的Rails项目和往常一样:

$ rails new my_project 
$ cd my_project 
$ bundle 

然后你就可以使用scaffold生成一些代码:

$ rails g scaffold Product name:string price:float 

并迁移数据库:

$ rails db:migrate # => update the database 

你现在可以看看app/controllers/products_controller.rb

class ProductsController < ApplicationController 
    before_action :set_product, only: [:show, :edit, :update, :destroy] 

    # GET /products 
    # GET /products.json 
    def index 
    @products = Product.all 
    end 

    # GET /products/1 
    # GET /products/1.json 
    def show 
    end 

    # GET /products/new 
    def new 
    @product = Product.new 
    end 

    # GET /products/1/edit 
    def edit 
    end 

    # POST /products 
    # POST /products.json 
    def create 
    @product = Product.new(product_params) 

    respond_to do |format| 
     if @product.save 
     format.html { redirect_to @product, notice: 'Product was successfully created.' } 
     format.json { render :show, status: :created, location: @product } 
     else 
     format.html { render :new } 
     format.json { render json: @product.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /products/1 
    # PATCH/PUT /products/1.json 
    def update 
    respond_to do |format| 
     if @product.update(product_params) 
     format.html { redirect_to @product, notice: 'Product was successfully updated.' } 
     format.json { render :show, status: :ok, location: @product } 
     else 
     format.html { render :edit } 
     format.json { render json: @product.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /products/1 
    # DELETE /products/1.json 
    def destroy 
    @product.destroy 
    respond_to do |format| 
     format.html { redirect_to products_url, notice: 'Product was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_product 
     @product = Product.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def product_params 
     params.require(:product).permit(:name, :price) 
    end 
end 

正如你所看到的的create行动。这是您可以如何响应不同的请求类型。

了解更多关于它:http://edgeapi.rubyonrails.org/classes/ActionController/MimeResponds.html#method-i-respond_to

+0

谢谢@RaVeN。但我应该如何配置我的路线的API? – poombavai

+0

看看'config/routes.rb'。它们会自动生成。您可以使用与检索html相同的路由,以触发'respond_to.json',您可以将'.json'附加到路由:exapmle:'/ products/1.json'(您可以看到上面的注释行动如何达到他们) – siegy22

+0

Thankyou @RaVeN。 Rails很棒。我知道了。 – poombavai