Не уверен, что у этого есть реальный ответ или нет, но здесь идет.Appengine Python Webapp2 API Логическая структура
Я создаю webapp, используя webapp2 на appengine, который будет предоставлять JSON API только клиентам (кроме шаблонов HTML-шаблонов для браузеров).
У меня есть main.py, который направляет входящие URL-адреса обработчикам. Обработчики разделяются на модули по функциям (т.е. user_auth, user_info, группы и т. Д.). У меня есть модуль models.py, где живут мои ndb.Model
.
Самый низкий уровень кода с участием Model
S содержатся в Model
подклассов в models.py (т.е. models.Group
имеет classmethod называется create_group
, который вызывается groups.AddGroupHandler.add_group
, который вызывается groups.AddGroupHandler.post
.)
I также есть модуль api.py, который содержит классы для всего поведения webapp (то есть api.UserAuth
, api.Signup
, api.RegistrationVerification
и т. д.), который содержит методы класса, которые возвращают JSON для этих действий (то есть api.UserAuth.session_expired
, api.RegistrationVerification.bad_token
и т. д.).
Методы в api.py вызывают методы «низкого уровня» в моделях, «вспомогательные» методы в модулях обработчика (то есть groups.AddGroupHandler.add_group
и т. Д.) И сами методы обработчика (то есть groups.AddGroupHandler.post
, и т.д...).
Является ли эта структура причиной проблем в будущем, или это прекрасно, как есть? Кроме того, существуют ли какие-либо стандартные структуры, которые, как известно, работают для такого проекта?
EDIT: Я не использую REST или что-то в этом роде.
Вы знакомы с шаблоном проектирования контроллеров модели (MVC)? Это вообще очень полезно. В вашем конкретном случае вы хотите отделить свою «Модель» от своего «Контроллера», чтобы упростить ее поддержку в будущем. «Просмотр» по существу будет вашим кодом JSON-сериализации. – dragonx
Если вы сопоставляете URL-адреса с API-интерфейсами, вы используете REST: http://en.wikipedia.org/wiki/Representational_state_transfer –
@dragonx Спасибо. Я смутно знаю об этом, но сейчас я рассмотрю его немного глубже. – Eliezer