Q:

Flask необязательный аргумент для url

Пытаюсь сделать так, что бы по ендпоинту можно было как передать аргументы так и просто вызвать всю инфу. 
Сейчас реализовано так
class Books(flask_restful. Resource):

    def __init__(self):
        self.reqparse = reqparse. RequestParser()
        self.reqparse.add_argument('categoty_id', type=int, location='json')
        super(Books, self).__init__()

    def get(self, categoty_id):
        # some logic
        return None

app = Flask('test')
app.config["DEBUG"] = True
api = flask_restful. Api(app)
api.add_resource(Books, '/api/v1/books', '/api/v1/books/<categoty_id>')
app.run()

Получаю конкретную категорию книг (допустим categoty_id=123 , научная литература)
http://localhost/api/v1/books/123

И хочу что бы было доступно вернуть все книги по url
http://localhost/api/v1/books

Пытался добавить required=False при добавлении аргумента.  Однако это не решило проблему. 
self.reqparse.add_argument('id', type=int, location='json', required=False)

Подскажите, как сделать, что бы одновременно по едпоинту можно было забрать и категорию книг и все. 

A:

При обращении по адресу /api/v1/books показывает ошибку: TypeError: get() missing 1 required positional argument: 'id'.  Это означает что метод вызывается без параметра, хотя он требуется. 
Просто добавьте параметру id значение по-умолчанию:
class Books(flask_restful. Resource):

    def __init__(self):
        self.reqparse = reqparse. RequestParser()
        self.reqparse.add_argument('id', type=int, location='json')
        super(Books, self).__init__()

    def get(self, id='default'):
        return id

При запросе на /api/v1/books будет возвращать "default", при запросе на /api/v1/books/123 - "123". 
Именно строку "default" указал для примера, можно использовать просто None:
def get(self, id=None):
    if id is None:
        ...  # Вернуть список всех книг
    else:
        ...  # Вернуть книгу с указанным id

