2

POST やその他の変更方法でクエリ パラメータを利用したいと考えています。これは、通常のクエリ パラメータ、または変数を含む URL ルールによって抽出されたパラメータに適用できます。しかし、Eve が POST 呼び出し用にこれらのパラメータを具体的に削除していることに気付きました。それらを保存するために必要な変更を簡単に行うことができますが、それらは意図的に削除されているため、それらを使用することの欠点があるかどうか疑問に思っています. この設計上の決定の理由は何ですか?

ユースケースの例

おそらく、誰かがこのようなクエリ パラメーターを使用したいと思うのはなぜかという疑問があるでしょう。私が考えている API は、POST および DELETE 呼び出しでクエリ パラメーターを使用します。これが便利な理由の 1 つの例は、ユーザーが呼び出しの検証と実際の動作を変更できるようにすることです。少し不自然な例を挙げると:

DELETE /resource/123
    -- fails if there are dependent objects for this resource
DELETE /resource/123?cascade=true  
    -- allow delete to cascade to dependent objects (eg. user clicked "I am sure")

もう一つの例:

POST /user?allowId=True  { "id" : 123, "name" : "Bob }
    -- will accept externally-defined ID as opposed to generating a new one

もう一つの例:

POST /container/<foo>/resource    { ... }
    -- create a new resource inside of the <foo> container

編集済み

request.args を使用して変数ルールを取得しようとしましたが、うまくいかないようです。(この方法でクエリ引数を取得すること可能ですが、変数ルールも同様に機能することを望みます。)

*in settings.py*
DOMAIN = {
    'ducks' : {
        'url':'rows/<row>/ducks',
        'schema': {
            'name' : { 'type' : 'string' }
        }
    }
}

*command line*
curl -H "Content-Type: application/json" -X POST 'http://localhost:5001/rows/1/ducks' -d '{"name":"bob"}

コードが on_pre_POST フックに入ると、request.args は空になります。endpoints.collection_endpoint()スタックをたどると、関数lookupに含まれていることがわかりますが、呼び出し{'row':1}には渡されません。post(response)意味があれば、これを修正するためにプル リクエストを送信できます。

編集済み 2

request.view_argsこれらのパラメータはではなくで使用できることがわかりましたrequest.args。これは、コードを変更することなく、フラスコ/イブのどこからでも両方の種類のパラメーターにアクセスできることを意味します。

4

1 に答える 1

1

request オブジェクトを渡すのでon_pre_POST、次のことを簡単に実現できます。

def my_pre_post_callback(resource, request):
    allowId = request.args.get('allowId')
    ...
于 2014-11-07T17:45:45.853 に答える