设计 RESTful API
Designing a RESTful API
我正在设计一个 REST API 作为初创公司 android 应用程序的后端服务。这家初创公司目前拥有其服务的网络版本,拥有大约 10,000 名用户。我对网页的设计有一些疑问 APIs:
- 如何让我的 API 安全?
我只希望 Android 客户端访问 API,没有其他人访问。一种方法是从前端发送加密令牌并在后端解密。还有别的办法吗?另外,我应该如何实现它?
- 如何使我的 API 快速高效?
有一个访问非常频繁的特定端点。不过,该端点上的信息变化不大。因此,在短时间内发出的请求最有可能得到 return 相同的响应。如何更快地响应此类请求? ETag
和 Last-Modified
会做这份工作吗?
- 我应该相信来自我客户的数据吗?
目前,当我收到带有某些参数的请求时,我对请求执行的唯一检查是检查参数是否为 null
。例如。如果请求将 mobile
作为参数,我只检查请求中是否存在 mobile
参数。我不执行其他检查,例如检查 mobile
的长度是否小于 10 然后抛出异常。
编辑:
任何认为问题是 'too broad' 的人,请发表评论,以便我可以编辑问题并添加任何必要的细节。
我正在一家初创公司工作,我有几乎相同的问题需要解决。我认为唯一的区别在于第一个问题,因为我决定将 API 访问权限仅限于经过身份验证的用户。但是,这是我解决问题的方法:
1.如何让我的 API 安全?
如我所写,我将 API 访问权限限制为仅对经过身份验证的用户开放。我正在使用基于令牌的身份验证和我自己的基于以下包的 REST registration/authentication API 端点:
如果您想使用此解决方案,我建议您也看看 django-rest-auth。
2。如何让我的 API 快速高效?
如果你有"requests that are made within a short time frame and that are most likely to return the same response",我建议你缓存这个响应,像这样(最简单的版本):
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。我应该相信来自我客户的数据吗?
绝对不会!尝试为您的 RESTful API 使用 django-rest-framework。它提供了一个名为 Serializer 的 class,它为您提供了一种强大的方法来控制 requests/responses 的 input/output。举个例子:
你的序列化器
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.']}
我正在设计一个 REST API 作为初创公司 android 应用程序的后端服务。这家初创公司目前拥有其服务的网络版本,拥有大约 10,000 名用户。我对网页的设计有一些疑问 APIs:
- 如何让我的 API 安全?
我只希望 Android 客户端访问 API,没有其他人访问。一种方法是从前端发送加密令牌并在后端解密。还有别的办法吗?另外,我应该如何实现它?
- 如何使我的 API 快速高效?
有一个访问非常频繁的特定端点。不过,该端点上的信息变化不大。因此,在短时间内发出的请求最有可能得到 return 相同的响应。如何更快地响应此类请求? ETag
和 Last-Modified
会做这份工作吗?
- 我应该相信来自我客户的数据吗?
目前,当我收到带有某些参数的请求时,我对请求执行的唯一检查是检查参数是否为 null
。例如。如果请求将 mobile
作为参数,我只检查请求中是否存在 mobile
参数。我不执行其他检查,例如检查 mobile
的长度是否小于 10 然后抛出异常。
编辑: 任何认为问题是 'too broad' 的人,请发表评论,以便我可以编辑问题并添加任何必要的细节。
我正在一家初创公司工作,我有几乎相同的问题需要解决。我认为唯一的区别在于第一个问题,因为我决定将 API 访问权限仅限于经过身份验证的用户。但是,这是我解决问题的方法:
1.如何让我的 API 安全?
如我所写,我将 API 访问权限限制为仅对经过身份验证的用户开放。我正在使用基于令牌的身份验证和我自己的基于以下包的 REST registration/authentication API 端点:
如果您想使用此解决方案,我建议您也看看 django-rest-auth。
2。如何让我的 API 快速高效?
如果你有"requests that are made within a short time frame and that are most likely to return the same response",我建议你缓存这个响应,像这样(最简单的版本):
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。我应该相信来自我客户的数据吗?
绝对不会!尝试为您的 RESTful API 使用 django-rest-framework。它提供了一个名为 Serializer 的 class,它为您提供了一种强大的方法来控制 requests/responses 的 input/output。举个例子:
你的序列化器
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.']}