2017-01-05 5 views
0

は、私はちょうど2つのルートを作成します。Mojoliciousの2つのルートの違いは何ですか?

$r->any ('/api/v:api', [ api => qr/\d+/ ], { api => 1 })->partial(1); 
$r->under('/api/v:api', [ api => qr/\d+/ ], { api => 1 }); 

それは同じ両方の仕事です。

フードの違いは何ですか?私は最初のケースのための静的ファイルに(->any)リンクが/api/v1に移動していることに気づいた

UPD。これは、例外が発生した場合に顕著です。 mojo/debugテンプレートは、/api/v1/...パスから固定ファイルをロードしようとしましたが、/...ではありません。 なぜですか?

答えて

-1

underが先に呼び出されます。その内部に認証コードを入れることができます。

use strict; 
use warnings; 
use Mojolicious::Lite; 

under sub { 
    my $self = shift; 
    my $api_key = $self->req->url->to_abs->username; 
    my $api_secret = $self->req->url->to_abs->password; 

    if($api_key ne "Admin" && $api_secret ne "Password123") { 
     $self->res->headers->www_authenticate('Basic'); 
     $self->render(text => 'Error: API-Credentials are wrong', status => 401); 
     # No routes will be executed 
     return undef; 
    } 

    # Authentication with success, execute other routes 
    return 1; 
} 

# Only executed if the url is http://Admin:[email protected]:3000 
any '/' => sub { 
    my $self = shift; 
    my $date = Mojo::Date->new; 
    $self->render(text => $date, status => 200); 
}; 

保護したいルーチンの上に配置することが非常に重要です。

+0

'部分一致 'を含む' any'はどうでしょうか? prons/cons –

+0

'any'は、HTTPメソッドを使用して、以下の条件に一致することはできません。 $ r-> any(['GET'、 'POST'])。 DELETEでHTTPリクエストを送信すると、あなたのAPIは何をしていますか? POSTでアクセスすると同じリソースが返されますか?それは悪いAPIデザインです。 – user3606329

関連する問題