La requête / réponse HTTP de l'application de framework Django REST suppose JSON par défaut. JSON est bon, mais vous souhaitez utiliser MessagePack.
Pour changer cela, définissez Analyseurs / Rendus.
Demande --Parsers Réponse --Renderers
MessagePack n'est pas pris en charge par défaut, mais la documentation dit d'utiliser djangorestframework-msgpack.
MessagePack is a fast, efficient binary serialization format.
Juan Riaza maintains the djangorestframework-msgpack package which provides MessagePack renderer and parser support for REST framework.
djangorestframework-msgpack
Installez djangorestframework-msgpack.
pip install djangorestframework-msgpack
Définissez setting.py pour utiliser MessagePack.
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework_msgpack.parsers.MessagePackParser',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_msgpack.renderers.MessagePackRenderer',
),
}
Vous utilisez maintenant MessagePack.
Le reste est un bonus.
J'utilise Django REST Swagger, mais je ne sais pas comment utiliser MessagePack.
Par conséquent, l'environnement qui utilise Swagger (ici, lorsque DEBUG = True) permet également d'utiliser JSON.
if DEBUG == True:
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework_msgpack.parsers.MessagePackParser',
'rest_framework.parsers.JSONParser',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_msgpack.renderers.MessagePackRenderer',
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
}
else:
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework_msgpack.parsers.MessagePackParser',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_msgpack.renderers.MessagePackRenderer',
),
}
L'ordre est important. Puisque le haut est le principal, j'écrirai le pack de messages comme principal.
BrowsableAPIRenderer est pour ceci. Je ne l'utilise pas maintenant, mais je l'ai mis.
Écrivez pour utiliser MessagePack lors du test de la communication. Cela n'a pas de sens de tester avec JSON.
import msgpack
from django.test import TestCase
class ApiUsersTestCase(TestCase):
def test_put_users_pk_ok(self):
"""
Par exemple, une API qui définit les paramètres utilisateur
Puisqu'il s'agit d'une image, seul un simple test
"""
pk = 1
params = {
"name": "Atout"
}
response = self.client.put("/users/{0}/".format(pk), msgpack.packb(params, use_bin_type=True), "application/msgpack")
self.assertEqual(response.status_code, 201)
content = msgpack.unpackb(response.content, encoding='utf-8')
self.assertEqual(content["name"], params["name"])
Recommended Posts