Google app engine 它是否等同于将某些内容作为路径的一部分和参数?

Google app engine 它是否等同于将某些内容作为路径的一部分和参数?,google-app-engine,url,webapp2,Google App Engine,Url,Webapp2,现在,我有两种方法(显然)在我的应用程序中完成相同的事情。我可以让我的URL看起来像这样,也可以。在这两种情况下,我都可以从中提取我需要的东西,那就是衬衫 第一种方式(使用正则表达式): class-FirstHandler(BaseHandler): def get(自我,页面id): 目标=页面id 页码为r'(/(?:[a-zA-Z0-9+/?)*)' app=webapp2.WSGIApplication([('/something'+PAGE_RE,FirstHandler)], de

现在,我有两种方法(显然)在我的应用程序中完成相同的事情。我可以让我的URL看起来像这样,也可以。在这两种情况下,我都可以从中提取我需要的东西,那就是衬衫

第一种方式(使用正则表达式):

class-FirstHandler(BaseHandler):
def get(自我,页面id):
目标=页面id
页码为r'(/(?:[a-zA-Z0-9+/?)*)'
app=webapp2.WSGIApplication([('/something'+PAGE_RE,FirstHandler)],
debug=True)
第二种处理方法是使用参数,如下所示:

class SecondHandler(BaseHandler):
def get(自我):
target=self.request.get('q')
app=webapp2.WSGIApplication([('/something'SecondHandler)],
debug=True)

我的问题是,这些方法等效吗?如果我做一个或另一个,或者我必须考虑其他事情,这是一样的吗?

app.yaml
可以根据URL为您预先路由(到不同的WSGI应用程序,甚至使用
dispatch.yaml
的帮助,到不同的模块),但不基于对给定URL的特定查询

因此,如果您将资源标识为
/something/product/shirt
,您可能会在将来“管理性地”(通过更改
app.yaml
dispatch.yaml
配置文件,而不是Python代码)将某些产品预先路由到不同的WSGI应用程序甚至模块;如果您将其标识为
/something/product?q=shirt
,则基于配置文件的管理路由将仅基于
/something/product
发送到单个WSGI应用程序,然后将由服务于该应用程序的代码处理查询部分

因此,在其他条件相同的情况下,您可能更愿意使用URL来为将来保持更大的路由灵活性。查询部分对于诸如可选参数和订单独立性之类的东西来说是非常宝贵的——想象一下,例如
/something/product/shirt?fmt=json&size=xl
,其中
fmt
size
都是可选的,有一些默认值,并且可以任意顺序出现,这将是令人讨厌的/复杂的URL,而查询很容易实现


但一个带有单个强制参数的“查询语法”是一种(温和的)“API设计味道”——也不仅仅是在应用程序引擎中;虽然App Engine有自己的路由和调度机制,但它们并不特别与您从其他服务器所期望的不一致。

查看您期望发出的所有请求,并确定其中哪些请求应该由唯一的端点(
/shirt
)表示,哪些将允许一个或多个参数。必要时,您可以组合这些方法

使用url路径或参数没有性能损失或任何其他优势。关键因素包括:

  • 如果外部开发人员正在或将要使用您的API,那么理解它有多容易
  • 组织和维护代码有多容易
  • 当您需要扩展时,您的方法有多灵活
例如,
/shirt
现在看起来可能是个好主意,但一旦你有了数千种产品类型,维护它就成了一场噩梦。相反,您可能希望使用以下内容:

/product/?type=shirt&size=10&orderBy=price&results=20&offset=40

谢谢你的回答。目前,应用程序很小,不会获得太多流量,因此我对性能感兴趣(现在我了解到性能不受决策的影响)。我会把你说的话考虑到未来的项目中。