Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 设计restfulapi_Django_Api_Rest_Http_Header - Fatal编程技术网

Django 设计restfulapi

Django 设计restfulapi,django,api,rest,http,header,Django,Api,Rest,Http,Header,我正在为一家初创公司的android应用程序设计一个RESTAPI作为后端服务。这家初创公司目前拥有约1万名用户的网络版服务。我对web API的设计有几个疑问: 如何使API安全? 我只想让Android客户端访问API,不想让其他人访问。一种方法是从前端发送加密令牌,然后在后端解密。还有别的办法吗?还有,我应该如何实现它 如何使我的API快速高效? 有一个非常频繁访问的特定端点。不过,关于该端点的信息变化不大。因此,在短时间内发出的请求最有可能返回相同的响应。如何更快地响应此类请求?ETag

我正在为一家初创公司的android应用程序设计一个RESTAPI作为后端服务。这家初创公司目前拥有约1万名用户的网络版服务。我对web API的设计有几个疑问:

  • 如何使API安全?
  • 我只想让Android客户端访问API,不想让其他人访问。一种方法是从前端发送加密令牌,然后在后端解密。还有别的办法吗?还有,我应该如何实现它

  • 如何使我的API快速高效?
  • 有一个非常频繁访问的特定端点。不过,关于该端点的信息变化不大。因此,在短时间内发出的请求最有可能返回相同的响应。如何更快地响应此类请求?
    ETag
    和上次修改的
    会做这项工作吗

  • 我应该信任客户提供的数据吗?
  • 当前,当我收到带有某个参数的请求时,我对该请求执行的唯一检查是检查该参数是否为
    null
    。例如,如果请求将
    mobile
    作为参数,我只检查请求中是否存在
    mobile
    参数。我不执行其他检查,如检查
    mobile
    的长度是否小于10,然后抛出异常

    编辑:
    任何人如果觉得这个问题“过于宽泛”,请留下评论,这样我就可以编辑这个问题并添加任何必要的细节。

    我正在一家初创公司工作,我有几乎相同的问题要解决。我认为唯一的区别在于第一个问题,因为我决定将API访问权限限制为仅经过身份验证的用户。然而,我是如何解决我的问题的:

    1。如何使我的API安全?

    正如我所写的,我将API访问权限仅限于经过身份验证的用户。我使用基于令牌的身份验证,并基于以下包使用自己的REST注册/身份验证API端点:

    如果你想使用这个解决方案,我建议你也看看

    2。如何使我的API快速高效?

    如果您有“在短时间内发出的请求,并且最有可能返回相同的响应”,我建议您缓存此响应,类似以下内容(最简单的版本):

    验证

    serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
    serializer.is_valid()
    # False
    serializer.errors
    # {'email': [u'Enter a valid e-mail address.'], 'created': [u'This field is required.']}
    

    请看一下。

    问题很广泛,但这里有一些反馈。1.“安全”可以。考虑你所保护的资源,以及它们是如何被访问的。对于您提到的特定任务,可以尝试通过HTTPS建立会话并传递令牌,但这本身可能是一个完整的问题。2.可能有一些因素会影响API请求的延迟。尝试使用分析工具确定花费的时间最多的地方。缓存是一个很好的选择,但是考虑它是在哪里完成的(数据库,会话,应用程序?)。3.“不,永远不会。”皮曼说。所谓安全,我的意思是只有android客户端可以访问API。我想买个代币就行了。2.你能推荐一个好的评测工具来衡量API性能吗?3.是的,我不应该信任来自客户端的数据并执行所有必要的检查。根据应用程序堆栈的不同,您需要不同的工具,但看起来您正在使用Django,因此可能:
    class CommentSerializer(serializers.Serializer):
        email = serializers.EmailField()
        content = serializers.CharField(max_length=200)
        created = serializers.DateTimeField()
    
    serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
    serializer.is_valid()
    # False
    serializer.errors
    # {'email': [u'Enter a valid e-mail address.'], 'created': [u'This field is required.']}