2014-12-10 1 views
1

В случае у меня этот код:Есть ли способ автоматически генерировать описание REST API JSON из бутылки маршрутов

class MyApp(): 
    def __init__(self): 
     self.bottle = Bottle() 
     self.bottle.route('/')(self.show_api) 
     self.bottle.route('/api/')(self.show_api) 
     self.bottle.route('/api/item', method='PUT')(self.save_item) 

    def show_api(self): 
     return <JSON representation of the API?> 

Можно ли получить API документацию REST в формате JSON от этого? по какой-то причине self.bottle.routes не вернул ничего полезного.

Спасибо!

ответ

1

На самом деле правильный путь для создания описания JSON API, кажется:

from collections import defaultdict 
import json 

def show_api(self): 
    api_dict = defaultdict(dict) 

    for route in self.bottle.routes: 
     api_dict[route.rule]['url'] = 'http://myhost:port{}'.format(route.rule) 
     api_dict[route.rule]['method'] = route.method 

     # additional config params 
     for key in route.config: 
      api_dict[route.rule][key] = route.config[key] 

    return json.dumps(api_dict) 
0

Bottle.route() предназначен для использования в качестве декоратора:

@app.route('/hello/:name') 
def hello(name): 
    return 'Hello %s' % name 

Так что делает возвращение что-то полезное: декорированная функция.

Затем вы можете использовать app.routes, чтобы получить список объявленных маршрутов.

print(app.routes) 

Выход:

[<GET '/hello/:name' <function hello at 0x7f4137192e18>>] 

Функция не является непосредственно JSON сериализации. Но вы можете легко использовать str, чтобы получить представление строки.

+0

Была ошибка в моем коде, где я ожидал его, чтобы вернуть список маршрутов в окне браузера, но факт, что вывод <> сделал его похожим на то, что ничего полезного не было возвращено. Конечно, когда я печатаю, я вижу функции. –