首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST用于使用Falcon生成随机数

REST用于使用Falcon生成随机数
EN

Code Review用户
提问于 2018-05-02 19:08:06
回答 3查看 81关注 0票数 3

我编写了REST,用于使用Falcon(https://falconframework.org/)生成随机数,只是为了我的学习过程。

这是API:

代码语言:javascript
复制
http "localhost:8000/random-number?min=10&max=10"

这是代码:

代码语言:javascript
复制
class RandomNumber:
    def on_get(self, req, resp):
        """Handles GET requests"""

        if 'min' not in req.params:
            raise falcon.HTTPMissingParam('min')

        if 'max' not in req.params:
            raise falcon.HTTPMissingParam('max')

        min_n = req.params['min']
        max_n = req.params['max']

        if min_n.isnumeric() == False:
            raise falcon.HTTPInvalidParam('min must be number', min_n)

        if max_n.isnumeric() == False:
            raise falcon.HTTPInvalidParam('max must be number', max_n)

        min_n =int(min_n)
        max_n =int(max_n)

        if min_n > max_n:
            raise falcon.HTTPInvalidParam('min is bigger than max', (min_n, max_n))

        number = random.randint(min_n, max_n)
        result = {'lowerLimit': min_n, 'higherLimit': max_n, 'number': number}
        resp.media = result

api = falcon.API()
api.add_route('/random-number', RandomNumber())

反馈意见很受欢迎。

EN

回答 3

Code Review用户

回答已采纳

发布于 2018-05-02 19:25:08

我没有很多好的建议,但我会提供一些小的想法。如果其他人给出了更好的答案,他们可以自由地加入以下内容:

  • 等号后的空格:min_n = int(min_n) # <--不是“=int.”
  • 在解析整数HTTP参数时有一些代码重复。这可以封装如下: def numeric_param(req,name):try: req.params int(req.params名字),除了KeyError: name falcon.HTTPMissingParam(name),除了ValueError: name falcon.HTTPInvalidParam('{}必须是整数‘..format(Name),val)类RandomNumber: def on_get(self,req,resp):“”句柄GET请求“”min_n =numeric_param(Req),‘'min') max_n = numeric_param(req,'max')注意到,我采用了稍微标准一些的方法,即“尝试并优雅地失败”,而不是显式地检查我是否能够成功;例如,如果不存在KeyError,我只是索引params并捕获它,如果不可能,我会将结果转换为int,并捕获ValueError
  • 我经常看到“上限”而不是“上限”。

同样,这些只是一些小建议,我真的不知道如何才能更好地完成同样的任务。

票数 2
EN

Code Review用户

发布于 2018-05-02 19:22:29

这是一个很小的代码,但是有一些改进要做:

  1. 无用的复制粘贴,如果您有5个条件?:如果'min‘不在req.params中:举起falcon.HTTPMissingParam('min')如果'max’不在req.params中:提高falcon.HTTPMissingParam('max')

当你能做到时:

代码语言:javascript
复制
for c in ['min','max']:
  if c not in req.params:
      raise falcon.HTTPMissingParam(c)
  1. 不要用== False测试min_n.isnumeric() == False:

应该是

代码语言:javascript
复制
    if not min_n.isnumeric():
票数 2
EN

Code Review用户

发布于 2018-05-03 06:17:16

因为前面的答案很好,所以我只想强调一下EAFPduck typing的概念。

当新开发人员(和经验丰富的)开发人员接触Python时,他们通常会带来来自其他语言的影响。

正如他们在前面的答案中已经说过的那样,Python具有很大的能力和方便性,可以动态地处理错误。您不需要在尝试之前检查所有东西五次,因为他们说“如果它像鸭子一样走路,那么它就必须是鸭子。”(Duck typing概念)。无论如何,使用这个概念,代码看起来更清晰,甚至更漂亮。

在你的例子中,这只是语言力量主题的一个小例子。无论您正在编写哪种语言,始终要检查使用语言的能力是否是为了您自己的利益。

在python的例子中,尝试找到pythonic的方法来做一些事情,就像Python的禅说的:

“应该有1,最好只有一种--很明显的办法。”

共享关于Duck typing/EAFPhttps://youtu.be/x3v9zMX1s4s的链接

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/193489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档