J'ai intégré le django rest framework version 3.10 dans un projet django 2.2 existant, en plaçant l'api Root à l'emplacement suivant /api
.
J'essaie maintenant d'utiliser le client coreapi cli pour télécharger des documents sur le serveur.
$ coreapi get http://localhost:8000/openapi
<DownloadedFile '/root/.coreapi/downloads/openapi (4)', open 'rb'>
$ coreapi get http://localhost:8000/api
{
"invoices": "http://localhost:8000/api/invoices/"
}
$ coreapi action invoices list
Index ['invoices']['list'] did not reference a link. Key 'invoices' was not found.
/openapi
est un point de terminaison qui génère un schéma à la demande et retourne
openapi: 3.0.2
info:
title: Orka
version: TODO
description: API for orka project
paths:
/invoices/:
get:
operationId: ListInvoices
parameters: []
responses:
'200':
content:
application/json:
schema:
required:
- file_name
- original_file_name
properties:
file_name:
type: string
original_file_name:
type: string
maxLength: 80
upload_date:
type: string
format: date-time
readOnly: true
data:
type: object
nullable: true
confidence:
type: number
user_verified:
type: boolean
/invoices/{id}/:
get:
operationId: retrieveInvoice
parameters:
- name: id
in: path
required: true
description: A unique integer value identifying this Invoice.
schema:
type: string
responses:
'200':
content:
application/json:
schema:
required:
- file_name
- original_file_name
properties:
file_name:
type: string
original_file_name:
type: string
maxLength: 80
upload_date:
type: string
format: date-time
readOnly: true
data:
type: object
nullable: true
confidence:
type: number
user_verified:
type: boolean
Il n'existe pas de chemin compliqué pour les factures (même s'il devrait être /api/invoices
).
J'ai réussi à faire fonctionner coreapi avec des apis externes, donc cela semble être un problème avec la façon dont je configure mes urls et/ou vues.
Les deux sont très simples.
# urls.py
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'invoices', views.InvoiceViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
# views.py
# ... imports ...
class InvoiceSerializer(serializers.HyperlinkedModelSerializer):
"""Defines API representation of invoices"""
class Meta: # pylint:disable=too-few-public-methods, missing-docstring
model = Invoice
fields = (
'file_name',
'original_file_name',
'upload_date',
'data',
'confidence',
'user_verified',
)
class InvoiceViewSet(viewsets.ModelViewSet):
"""Defines api views for invoices"""
# default permissions are set in settings.py
parser_classes = (JSONParser, XMLParser, FormParser, MultiPartParser)
queryset = Invoice.objects.all()
serializer_class = InvoiceSerializer
@action(methods=['post'], detail=True)
def upload_with_ground_truth_file(self, request, pk):
pass
Il semble que je manque quelque chose de flagrant. Que dois-je configurer pour pouvoir utiliser le client coreapi pour consommer mon api ?