3

エンタープライズアプリケーション用のRESTAPIの最初のバージョンを終了し、次のリリースに進みます。サブドメインを使用してAPIをバージョン管理する利点/抜け穴を知りたいです。

この構造を仮定しましょう:

ソースフォルダ:

   /var/www/html/domain/api/ (A)

これは今のところ唯一のバージョンです。たとえば、今から2週間後に、APIのバージョン2をリリースします。上記のフォルダからv1.0にファイルをコピーします。したがって、新しいバージョン管理されたフォルダーは次のようになります。

ソースフォルダ:

   /var/www/html/domain/apiv1-0/ (B)

フォルダBは変更されません。すべての新しい開発は、「A」のメインフォルダにプッシュされます。ファイル内の適切なフォルダを指定するために、.htaccess次のように記述します。

  - Check the subdomain
  - Match it with the folder
  - Server files from that folder.

例:

  api.domain.com ==> Always serves the latest version.
  apiv1-0.domain.com ==> Version 1 API will be served.
  apiv2-0.domain.com ==> Version 2 API will be served.

これが良い習慣かどうか知りたいです。注意点はありますか?そして、上記を処理するために「.htaccess」を設定する方法は?

URIでバージョン番号を使用したくありません。それは標準的な習慣かもしれませんが、私はそれが好きではありませんでした。

編集: ご覧のとおり、サブドメインは異なりますが、新しいバージョンがリリースされるたびに、Apache構成や構成について心配する必要はありません。.htaccess

編集: ベースフォルダ:

/var/www/html/domain/
4

1 に答える 1

1

これが良い習慣かどうか知りたいです。注意点はありますか?

REST APIをバージョン管理してデプロイする方法を意味するのであれば、それで問題ないと思います。このためにhtaccessルーティングを使用する場合、他のドメインを介してさまざまなAPIにアクセスできる可能性があるという警告がありますが、これはルールよりもサーバー構成に依存します。たとえば、デフォルトの仮想ホストが設定されている場合、誰かがを介してapiフォルダーにアクセスできる可能性がありますhttp://123.45.67.89/apiv1-0/

上記を処理するために「.htaccess」を設定するにはどうすればよいですか?

あなたはこれを求めている:

RewriteEngine On
# ensure trailing slashes for /api otherwise mod_dir will expose the underlying layout
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/api%{REQUEST_URI} -d
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

# for /api
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/api%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/api%{REQUEST_URI} -d
RewriteRule ^(.*)$ /api/$1 [L]

# ensure trailing slashes for /apivXXX otherwise mod_dir will expose the underlying layout
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

# for everything else
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.domain.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /%1/$1 [L]

最初の2つのルールは2番目の2とほぼ同じですが、最初のルールはwww *(または何も)に/api/マップされ、2番目の2つのルールはディレクトリにマップされたサブドメインを処理します(apiv1-0 .domain.comはにマップされます) /apiv1-0/

mod_dirチェックは、ディレクトリを要求しようとしたときに、DirectorySlash末尾にスラッシュがない場合、mod_dirが要求をリダイレクトするためです。これが発生すると、レイアウトが公開され、機能しなくなります。たとえば、のtest/api/にディレクトリがあり、リクエストhttp://domain.com/testすると、そのディレクトリはに書き換えられ/api/test、mod_dirは「test」がディレクトリであると認識しますが、末尾にスラッシュがないため、mod_dirはブラウザを(誤って)リダイレクトしますhttp://domain.com/api/test/。スラッシュですが、を公開し/api/ます。

于 2012-08-28T22:23:13.427 に答える