2012-12-21 37 views
7

我正在使用Swagger-UI瀏覽我自己的API,使用葡萄構建並自動記錄下葡萄招搖。Swagger-ui只發送OPTIONS而不POST POST http方法儘管工作API

我用Google搜索了一遍,並嘗試了所有可以找到的建議,但是我無法開機自檢。這是我的標題:

header "Access-Control-Allow-Origin", "*" 
    header "Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE" 
    header "Access-Control-Request-Method", "*" 
    header "Access-Control-Max-Age", "1728000" 
    header "Access-Control-Allow-Headers", "api_key, Content-Type" 

我剛剛投入了所有建議。我已啓用supportedSubmitMethods中的所有HTTP方法,並且使用POSTMAN Chrome擴展程序測試了API,並且它可以很好地工作。正確創建用戶並返回正確的數據。

但是,所有我招搖後得到的是服務器報告:

Started OPTIONS "/v1/users.json" for 127.0.0.1 at 2012-12-21 04:07:13 -0800 

和招搖響應看起來像這樣:

請求URL

http://api.lvh.me:3000/v1/users.json 

響應體

響應代碼

0 

響應頭

我還測試與郵差選項響應,它下面是:

Allow →OPTIONS, GET, POST 
Cache-Control →no-cache 
Date →Fri, 21 Dec 2012 12:14:27 GMT 
Server →Apache-Coyote/1.1 
X-Request-Id →9215cba8da86824b97c6900fb6d97aec 
X-Runtime →0.170000 
X-UA-Compatible →IE=Edge 
+0

你解決了嗎?我陷入了同樣的問題。 –

+0

說實話我不記得我是解決了還是把它放在了架子上 - 我今天再看看並報告Neha –

+0

它的工作。我提供了一個域名並將basePath更改爲域名。 –

回答

0

很高興聽到你正在使用的葡萄招搖:我認爲這是真棒:)

我不完全確定你有同樣的問題,但是當從瀏覽器本地測試時,它會嘗試檢查源是否與請求相同,因此爲了確保我沒有得到該錯誤,我創建了一個小的中間件,將電話l我們允許所有來源的瀏覽器。

我使用的是軌道的過程(與真棒軌道-API寶石創建的),所以我創建lib/middleware/access_control_allow_all_origin.rb具有以下內容的新文件:

module Middleware 
    class AccessControlAllowAllOrigin 

    def initialize(app) 
     @app = app 
    end 

    def call(env) 
     status, headers, body = @app.call(env) 
     allow_all_origin!(headers) 
     [status, headers, body] 
    end 

    private 

    def allow_all_origin!(headers) 
     headers['Access-Control-Allow-Origin'] = '*' 
     headers['Access-Control-Request-Method'] = '*' 
    end 

    end 
end 

,並在我的application.rb底部我只是添加中間件如下:

require 'middleware/access_control_allow_all_origin' 
config.middleware.insert_after Rack::ETag, Middleware::AccessControlAllowAllOrigin 

希望這會有所幫助。

+0

這不是我所得到的CORS問題 - 儘管這是我之前遇到的一個早期問題。我把這個問題放在了後面的問題上,專注於問題的其他部分,所以本週我將重新審視這個問題。 –

0

我不知道ruby-on-rails的解決方案,因爲我正在使用Swagger和play framework 2.0.2。 我向它提供了一個域名,並在application.conf文件中將basePath更改爲域名爲swagger.api.basepath="domain-name",它工作正常。 您可以更改中的basePathdomain-name。我讀了api-docs api-docs

+0

哦 - 這很有趣 - 好吧,讓我檢查一下,然後在接下來的24小時內使用我的Rails實現 - 如果有效,我將點擊對號和upvote :-) –

0

而您的網絡服務器劫持頭?例如,如果您使用的是NGinx,則在某些情況下,您的「OPTIONS」請求可能無法發送適當的值作爲響應。

什麼是您的OPTIONS請求響應?你可以把它倒在這裏嗎?我會告訴你,如果可以的話。

+0

這是一個很好的問題。我沒有忽視它。只需要有機會檢查一下,因爲我沒有看到整體。測試只是本地主機,我不記得我正在使用哪臺服務器 - 檢查並更新它。 –

2

我有同樣的問題,只是解決它,希望這可以幫助別人。

Swagger-UI只通過'form'參數類型,而不是'body'參數類型,在本期的https://github.com/wordnik/swagger-ui/issues/72中引用通過POST接受多個參數。

我用分支:git =>'git://github.com/Digication/grape-swagger.git'將'post'request paramType改爲'form'。對於swagger_doc(可能是在路徑/ swagger_doc/API或類似的)生成的XML輸出應該是這個樣子:

<api> 
    <path>/api/v2/...</path> 
    <operations type="array"> 
     ... 
     <httpMethod>POST</httpMethod> 
     <parameters type="array"> 
      <parameter> 
      <paramType>form</paramType> 
      ...More 

<paramType>body</paramType> 
...More 

我用葡萄招搖護欄寶石自動安裝招搖-ui on localhost(文件也可以從swagger-ui站點下載),並且一切正常!

2

有同樣的問題。加入CORS

加入到Gemfile中修正:

gem 'rack-cors', :require => 'rack/cors' 

加入到application.rb中

config.middleware.use Rack::Cors do 
    allow do 
     origins '*' 
     # location of your API 
     resource '/*', :headers => :any, :methods => [:get, :post, :options, :put] 
    end 
end 

確保你已經改變API的位置在這裏。