Google App Engine:应用后台路由和分段的最佳实践(Python)

3 投票
1 回答
655 浏览
提问于 2025-04-18 10:50

我的问题其实很简单,虽然我花了好几个小时在官方的GAE Python文档上寻找答案,但还是没能找到一个真正的解答(尤其是在这一页上)。

假设我正在构建一个应用的后台,这个应用会发出几种不同的请求,虽然这些请求有些相关,但可以根据它们通过端点方法请求的数据类型来进行分类。目前,我已经为这些请求构建了所有的messages.Message类,并且它们都放在不同的模块里。例如,我把所有与用户相关的请求/响应消息、所有与评论相关的消息,以及所有与调查相关的消息都分开了(这是一个简单的调查应用)。

问题是:在保持简单的前提下,如何最好地划分端点API,以避免在同一个remote.Service类中有一个巨大的文件,里面包含太多请求。

我可以创建多个remote.Service类吗?然后把它们分布在几个模块中,再把它们都包含在一个单独的模块里?像这样:

@endpoints.api(name='helloworld', version='v1')
class UsersApi(remote.Service):
    """Users API v1."""

   #some endpoints methods, all with the "users/ path"

class CommentsApi(remote.Service):
    """Comments API v1."""

   #some endpoints methods, all with the "comments/ path"

class SurveysApi(remote.Service):
    """Surveys API v1."""

   #some endpoints methods, all with the "surveys/ path"


APPLICATION = endpoints.api_server([UsersApi, CommentsApi, SurveysApi])

还是说我应该利用app.yaml文件中的路由来处理请求?这两种方案可行吗?它们是最好的选择吗?

如果你能想到比我提议的更好的方法,请告诉我。我可以提供一些代码示例来说明我的建议,如果不清楚的话。提前感谢你的帮助。

1 个回答

0

总之,我从这里和那里获取了一些信息,尤其是在stackoverflow上,然后重新阅读了官方文档,进行了测试,结果成功了。这里有一个例子:

from google.appengine.ext import endpoints
from protorpc import remote

my_api = endpoints.api(name='awsum_app', version='valpha')

@my_api.api_class(resource_name='users')
class UsersService(remote.Service):

    @endpoints.method(UserRegistrationRequest, UserLoginResponse, path='users/register', name='register')
    def user_register(self, request):
        """Registerin' users man"""

    @endpoints.method(UserLoginRequest, UserLoginResponse, path='users/login', name='login')
    def user_login(self, request):
        """Login dat user"""

    @endpoints.method(UserLogoutRequest, UserLogoutResponse, path='users/logout', name='logout')
    def user_logout(self, request):
        """Dude this user is so login out, cya bro"""

@my_api.api_class(resource_name='friends')
class FriendsService(remote.Service):

    @endpoints.method(AddressBookRequest, AddressBookResponse, path='friends/addressbook', name='addressbook')
    def get_address_book(self, request):
        """Retrieveing mah address book to look up bros to hand out with"""

    @endpoints.method(AddFriendRequestRequest, AddFriendRequestResponse, path='friends/friendrequest', name='friendrequest')
    def send_friend_request(self, request):
        """Hey dis bro looks cool let's add him"""

    @endpoints.method(AcceptFriendRequestRequest, AcceptFriendRequestResponse, path='friends/acceptrequest', name='acceptrequest')
    def accept_friend_request(self, request):
        """Ok man you're cool let's be friend"""

    @endpoints.method(DeleteFriendRequest, DeleteFriendResponse, path='friends/deletefriend', name='deletefriend')
    def delete_friend(self, request):
        """Shit dis fucker's a bitch i ain't no friend no more with this bitch"""

APPLICATION = endpoints.api_server([my_api])

撰写回答