少於 1 分鐘閱讀

設計模式

    1. Rails API
      • 原生預設的模式,使用原本的route控制
      • 若是新系統,推薦使用
    1. Grape API
      • 另外寫的模式
      • 原有系統已經有一定規模,推薦使用,不會影響到既有系統

1. Rails API 實作

rack-cors 設定

Access-Control-Allow-Origin 問題解決

gem 'rack-cors', require: 'rack/cors'
# config/application.rb
module YourApp
  class Application < Rails::Application
    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', :headers => :any, :methods => [:get, :post, :options]
      end
    end
	end
end

若是使用production也想要給develop使用的話需要加入此行

# production.rb
config.serve_static_assets = true

還是不行的話 確認一下responce的header有可能需要設定在nginx.conf 加入Access-Control-Allow-Origin *

location @static_asset {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
        add_header ETag "";
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Request-Method *;
    }

No Route 處理方式

###

2. Grape API 實作

參考

  1. https://github.com/cyu/rack-cors/issues/33
  2. https://stackoverflow.com/questions/25945419/how-do-i-configure-access-control-allow-origin-with-rails-nginx-and-passenger
  3. https://coderwall.com/p/vifllw/json-api-response-for-no-route-matches

更新時間:

留言