Sou iniciante no framework REST do Django e preciso de seus conselhos. Estou desenvolvendo um serviço da web. O serviço deve fornecer interface REST para outros serviços. A interface REST, que eu preciso implementar, não está funcionando diretamente com meus modelos (refiro-me às operações get, put, post, delete). Em vez disso, fornece outros serviços com alguns resultados de cálculo. Em uma solicitação, meu serviço faz alguns cálculos e apenas retorna os resultados (não armazena os resultados em seu próprio banco de dados).
Abaixo está o meu entendimento de como essa interface REST pode ser implementada. Corrija-me se eu estiver errada.
- Crie uma classe que faça os cálculos. Nomeie-o 'CalcClass'. CalcClass usa os modelos em seu trabalho.
- Os parâmetros necessários para os cálculos são transmitidos ao construtor.
- Implemente a operação de calc. Retorna resultados como 'ResultClass'.
- Crie ResultClass.
- Derivado do objeto.
- Apenas possui atributos que contêm os resultados do cálculo.
- Uma parte dos resultados do cálculo é representada como tupla de tuplas. Pelo que entendi, seria melhor uma serialização adicional implementar uma classe separada para esses resultados e adicionar uma lista desses objetos ao ResultClass.
- Crie o serializador para ResultClass.
- Derivar de serializadores.Serializer.
- Os resultados do calc são somente leitura, portanto, use principalmente a classe Field para campos, em vez de classes especializadas, como IntegerField.
- Eu não deveria implementar o método save () nem no ResultClass nem no Serializer, porque não vou armazenar os resultados (só quero devolvê-los quando solicitado).
- Implique serializador para resultados aninhados (lembre-se da tupla das tuplas mencionadas acima).
- Crie View para retornar os resultados do cálculo.
- Derive do APIView.
- Precisa apenas de get ().
- Em get (), crie CalcClass com os parâmetros recuperados da solicitação, chame calc (), obtenha ResultClass, crie Serializer e passe o ResultClass para ele, retorne Response (serializer.data).
- URLs
- Não há raiz API no meu caso. Eu deveria apenas ter URLs para obter vários resultados de cálculo (cálculo com parâmetros diferentes).
- Adicione chamadas format_suffix_patterns para navegação na API.
Perdi alguma coisa? A abordagem é correta em geral?