2011-02-05 10 views
0

django-pistonを使用してREST APIを構築しようとしています。ライブラリでは、タプルを使用して表示するフィールドを指定できます。私はタプルする文字列を変換するためにeval()を使用できることを読んだPythonでREST API用の文字列に変換する

http://localhost/api/users?attr=(id,title,(author,username,),) 

:など

fields = ('id', 'title', ('author', 'username',),) 

したがって、私は、開発者がGET操作を介してデータ形式を要求することを可能にしたいと思い。しかし、私は2つのブロッカーで会った。

  1. "( 'id'、 'title'、( 'author'、 'username'))"になるように簡単にパラメータ名に引用符を追加できますか?
  2. evalは安全ですか?私はこれを使って組み込み関数を取り除くことができると読んでいます:eval( "( 'id'、 'title'、( 'author'、 'username'、))"、{'_ builtins _' ]}、{})

なぜ私は開発者がデータセットを指定できるようになっているかについて、REST APIの構築方法についてLinkedInのアドバイスに従っています。すべてのヘルプは本当に感謝されhttp://blog.linkedin.com/2009/07/08/brandon-duncan-java-one-building-consistent-restful-apis-in-a-high-performance-environment/

はここのリンクです。

乾杯、 ミッキー

答えて

1

使用しているPythonのバージョンを指定していませんが、Python 2.6で動作し、evalを使用しないソリューションがあります。

import ast 

def parse_params(s): 
    root = ast.parse(s) 
    expr = root.body[0] 
    return process_node(expr.value) 

def process_node(node): 
    if isinstance(node, ast.Tuple): 
     return tuple(map(process_node, node.elts)) 
    elif isinstance(node, ast.Name): 
     return node.id 
    else: 
     raise ValueError("unsupported node type %r" % node) 
>>> parse_params('(id,title,(author,username,),)') 
('id', 'title', ('author', 'username'))
+0

ありがとう、それは動作します:) –

1

私はちょうどどんな構文あなたが適して見つける通常の文字列を解析するための方法、およびを使用します。私の意見では、そのようなあなたの内側の歯車を公開することは全く無意味です。

+0

DEVは、データセットを指定できるようにすることで大きなメリットがあります。いずれにせよ、これはモバイルデバイスに使用される内部APIです。 –

関連する問題