Oula non, c'est pas normal.
Je prends souvent l'exemple de l'API de GitHub que je trouve très bien designée :
https://developer.github.com/v3/pulls/#create-a-pull-request
Tu passes pas par un formulaire pour faire du POST. En fait t'es en train de foutre en l'air le concept de REST là. En règle générale un client choisit un content-type
et attend de l'API que toutes les ressources soient consistantes. Tout simplement parce que c'est pénible de jongler avec différents content-type et surtout ça demande au client d'avoir une connaissance avancée de l'API (attends mais oué cette URL là elle marche pas en JSON, celle-là oui, …).
Le but du jeu des frameworks côté serveur (toi qui connaît un peu Java, va voir RESTEasy par exemple) c'est de fournir une abstraction là-dessus.
La négociation du meilleur content-type se fait "par magie" "sous le capot" entre le client et le serveur, toi tu te contentes de lire ou retourner des données (en l'occurrence des Map, des tableaux ou des objets Java), sans avoir à te soucier de comment l'utilisateur va les recevoir. C'est pour cela que je suis un peu surpris que DRF ne soit pas capable de gérer ça (je pense que si en fait).
(je suis moi-même en train de développer un tel framework, c'est le genre de considérations dont je m'occupe à la place de l'utilisateur).
Y'a un cas qui va faire exception, c'est l'upload de fichier. Ou clairement, on n'a pas trop envie d'encoder l'ensemble du fichier en base64 avant de l'envoyer dans une requête avec une charge utile gigantesque (et donc perdre le chunked-encoding par exemple).
Dans ce cas-là, soit on fait une API d'upload dédiée (qui ne reçoit que le fichier, à l'aide d'une connexion chunked) et on gère les métadata à part, soit on passe par un formulaire multipart qui contient le fichier comme s'il était uploadé de façon "non REST" (non API quoi, avec un formulaire html) et un noeud qui lui, sera serializé en JSON, xml, … et contient les métadata.
Mais en dehors de ce genre de cas tordus, clairement on évite de mixer les content-type entre GET et POST et PUT, etc. Histoire que le client n'ait pas 50 types de données différents à gérer.