设计 RESTful API

问题描述 投票:0回答:1

我正在设计一个 REST API 作为初创公司 Android 应用程序的后端服务。该初创公司目前拥有网络版服务,拥有约 1 万名用户。我对 Web API 的设计有一些疑问:

  1. 如何确保我的 API 安全?

我只希望 Android 客户端能够访问 API,其他任何人都不能访问。一种方法是从前端发送加密令牌并在后端解密。还有其他办法吗?另外,我应该如何实施?

  1. 如何让我的API快速高效?

有一个访问非常频繁的特定端点。不过,该端点上的信息并没有太大变化。因此,在短时间内发出的请求最有可能返回相同的响应。如何更快地响应此类请求?

ETag
Last-Modified
可以完成这项工作吗?

  1. 我应该信任客户的数据吗?

目前,当我收到带有某些参数的请求时,我对请求执行的唯一检查是检查参数是否为

null
。例如。如果请求有
mobile
作为参数,我只检查请求中是否存在
mobile
参数。我不执行其他检查,例如检查
mobile
的长度是否小于 10,然后抛出异常。

编辑: 任何认为这个问题“太宽泛”的人,请发表评论,以便我可以编辑问题并添加任何必要的详细信息。

django rest http-headers
1个回答
1
投票

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

1。如何确保我的 API 安全?

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

如果您想使用此解决方案,我建议您也看看 django-rest-auth

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

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

if response_in_cache and time_passed < max_time_frame:
    return response_in_cache
else:
    generate response
    save response in the cache (for next time)
    return response

您还可以使用 New Relic 跟踪您的 api 性能。

3.我应该相信来自客户的数据吗?

绝对不是!尝试使用 django-rest-framework 作为你的 RESTful API。它提供了一个名为 Serializer 的类,它为您提供了一种控制请求/响应的输入/输出的强大方法。这是一个例子:

你的序列化器

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.']}

查看序列化器文档

© www.soinside.com 2019 - 2024. All rights reserved.