Как установить связь между маршрутизаторами и контроллерами?

Как устроен роутинг в FastAPI? Я не могу найти информацию в их документации. В качестве примера я создал такую структуру, аналогичную Laravel: <br/> индексный файл <br/> <pre><code>from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse   
from app.http.controllers.index_controller import IndexController     
     
app = FastAPI()

# Routers
@app.get("/")
def index():
 return IndexController.index</code></pre> <br/> <br/> файл контроллера <br/> <pre><code>class IndexController:

    def index():
     return 'Hello Word'</code></pre> <br/> <br/> При обращении к этому маршруту я получаю пустой JSON-объект без сообщения. В чем может быть ошибка? Какие источники можно изучить, чтобы лучше понять организацию роутов в FastAPI, пока официальная документация недоступна?
  • 28 декабря 2024 г. 16:43
Ответы на вопрос 1
В вашем коде есть несколько ошибок и недочетов, которые мешают корректной работе вашего FastAPI приложения. 

1. **Метод контроллера**: В вашем `IndexController` недостаёт аргумента `self`, так как это метод экземпляра класса. Если вы хотите использовать метод как статический, лучше использовать декоратор `@staticmethod` или просто сделать метод статическим.

2. **Возврат значения в маршруте**: Ваша текущая реализация возвращает метод `IndexController.index`, а не его результат. Следует вызывать метод, добавив скобки.

Вот исправленный код с использованием статического метода контроллера:

### Индексный файл
```python
from fastapi import FastAPI
from app.http.controllers.index_controller import IndexController

app = FastAPI()

# Routers
@app.get("/")
def index():
    return IndexController.index()
```

### Файл контроллера
```python
class IndexController:
    
    @staticmethod
    def index():
        return 'Hello World'
```

Теперь, когда вы обращаетесь к корневому маршруту `/`, вы получите `'Hello World'` в ответ.

### Роутинг в FastAPI
FastAPI использует маршрутизацию, основанную на декораторах, как в вашем примере. Вот некоторые основные моменты, которые стоит запомнить:

- Используйте декораторы (`@app.get()`, `@app.post()`, и т.д.) для привязки функций к маршрутам.
- Функции-обработчики маршрутов могут принимать дополнительные параметры, такие как `Request`, `Response` и т.д.
- Вы можете структурировать ваше приложение, используя `APIRouter` для организации ваших маршрутов по модулям, что позволит вам создавать более масштабируемый код.

### Ресурсы для изучения
Если официальная документация недоступна, вот несколько альтернатив:

1. **Учебники и курсы**: Найдите видео-уроки на платформе вроде YouTube по запросу "FastAPI tutorial".
  
2. **GitHub**: Проверьте репозитории на GitHub, содержащие проекты FastAPI. Многие разработчики делятся своими приложениями и примерами.

3. **Книги**: Есть книги о FastAPI, которые могут быть полезны. 

4. **Сообщества**: Присоединяйтесь к форумам разработчиков, таким как Stack Overflow, Reddit или Discord-серверам, посвящённым Python и FastAPI, чтобы задавать вопросы и получать поддержку от других разработчиков. 

Если у вас есть дополнительные вопросы или нужно что-то уточнить, не стесняйтесь спрашивать!
Похожие вопросы