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?
django
rest
django-rest-framework
Zakhar
fonte
fonte
Respostas:
O Django-rest-framework funciona bem mesmo sem vinculá-lo a um modelo. Sua abordagem parece boa, mas acredito que você pode cortar algumas das etapas para que tudo funcione.
Por exemplo, a estrutura restante vem com alguns renderizadores internos. Fora da caixa, ele pode retornar JSON e XML para o consumidor da API. Você também pode ativar o YAML instalando o módulo python necessário. O Django-rest-framework produzirá qualquer objeto básico como dict, list e tuple sem nenhum trabalho extra de sua parte.
Então, basicamente, você só precisa criar a função ou classe que recebe argumentos, faz todos os cálculos necessários e retorna seus resultados em uma tupla para a visualização da API REST. Se JSON e / ou XML atenderem às suas necessidades, o django-rest-framework cuidará da serialização para você.
Você pode pular as etapas 2 e 3 nesse caso e usar apenas uma classe para cálculos e outra para apresentação ao consumidor da API.
Aqui estão alguns trechos que podem ajudá-lo:
Observe que eu não testei isso. É apenas um exemplo, mas deve funcionar :)
O CalcClass:
A visualização REST:
Seus urls.py:
Esse código deve gerar uma lista de listas quando você acessar http://example.com/api/v1.0/resource/?format=json . Se você estiver usando um sufixo, poderá substituir
?format=json
por.json
. Você também pode especificar a codificação que deseja recuperar adicionando"Content-type"
ou"Accept"
aos cabeçalhos.Espero que isso ajude você.
fonte
.model
ou.queryset
propriedade.". Eu tentei o exemplo exato fornecido. Poderia ser algo com a versão recente do django-rest-framework?No urls.py, a função login_required requer
fonte
add a comment
sessão