7

私は Swagger-UI を使用して独自の API を参照しています。この API はグレープで構築され、グレープ-スワガーで自動的に文書化されています。

私は見つけたすべての提案をグーグルで試してみましたが、POSTを機能させることができません。ここに私のヘッダーがあります:

  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 をテストしましたが、完全に動作します。ユーザーを適切に作成し、正しいデータを返します。

ただし、swagger の投稿で得られるのは、サーバーのレポートだけです。

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

そして、このように見えるswagger応答:

リクエスト URL

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

レスポンスボディ

応答コード

0

応答ヘッダー

OPTIONS 応答も POSTMAN でテストしましたが、以下のとおりです。

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
4

5 に答える 5

0

ruby-on-railsSwaggerをで使用しているため、解決策がわかりませんplay framework 2.0.2。ドメイン名を指定し、application.confファイルでbasePathをドメイン名に変更しswagger.api.basepath="domain-name"ました。basePathをに変更できapi-docsますdomain-nameonapi-docsapi-docsについて 読みました。

于 2013-02-15T05:43:32.570 に答える
0

あなたがブドウの闊歩を使用していると聞いてうれしいです:私はそれが素晴らしいと思います:)

同じ問題が発生していることは完全にはわかりませんが、ブラウザからローカルでテストすると、オリジンが要求されたものと同じであるかどうかが確認されるため、エラーが発生しないように、小さなミドルウェアを作成しました。すべてのオリジンを許可することをブラウザに通知します。

Railsプロセス(すばらしいrails-api gemで作成)を使用しているので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

お役に立てれば。

于 2013-01-08T22:46:15.087 に答える
0

また、Web サーバーはヘッダーをハイジャックしますか? たとえば、NGinx を使用している場合、「OPTIONS」リクエストが適切な値を応答として送信しない場合があります。

OPTIONS リクエストの応答は何ですか? ここに捨てていい?それができるかどうか教えます。

于 2013-04-12T05:36:40.427 に答える