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