"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Blog reflexivo: Minha jornada construindo uma API de listagem de imóveis

Blog reflexivo: Minha jornada construindo uma API de listagem de imóveis

Publicado em 2024-11-03
Navegar:819

Reflective Blog: My Journey Building a Real Estate Listing API

Blog reflexivo: Minha jornada construindo uma API de listagem de imóveis


Introdução

Quando comecei a criar a API de listagem de imóveis, não sabia bem no que estava me metendo. Como desenvolvedor de software iniciante, a ideia de desenvolver uma API do zero parecia intimidante. Mas eu estava ansioso para me desafiar e colocar meu conhecimento em Python e SQL à prova. Agora, olhando para trás nesta jornada, estou surpreso com o quanto aprendi – não apenas sobre codificação, mas também sobre a importância da perseverança, a alegria de resolver problemas e a emoção de ver um projeto ganhar vida .

Esta postagem do blog é uma reflexão sobre minha experiência na construção deste aplicativo API de listagem de imóveis para iniciantes. Compartilharei os altos e baixos, os principais momentos de aprendizagem e alguns insights técnicos úteis sobre Python e SQL que tornaram este projeto desafiador e gratificante.


O começo: aprendendo os fundamentos do Python

Minha jornada começou com os fundamentos do Python. Comecei aprendendo o básico: tipos de dados, fluxo de controle, funções e programação orientada a objetos. A simplicidade e a legibilidade do Python facilitaram a compreensão rápida desses conceitos. No entanto, o verdadeiro desafio surgiu quando tive que aplicar esses fundamentos para resolver problemas do mundo real.

Compreender a programação orientada a objetos (OOP) foi um marco significativo. Percebi que usando classes e objetos, poderia criar uma forma estruturada de lidar com diferentes entidades, como Usuários e Propriedades, em minha API de Listagem de Imóveis. Isso lançou as bases para meu projeto, onde precisei modelar entidades do mundo real, como usuários, propriedades e aplicativos.

Por exemplo, em minha API, defini um modelo de usuário usando classes Python, o que me ajudou a entender o relacionamento entre diferentes entidades e como elas interagem dentro de um sistema. Aqui está uma versão simplificada do meu modelo de usuário:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, nullable=False)
    email = db.Column(db.String, nullable=False, unique=True)
    password = db.Column(db.String, nullable=False)
    role = db.Column(db.Enum('agent', 'property_owner', 'buyer', name='user_roles'), nullable=False)

    properties = db.relationship('Property', backref='owner', lazy=True)
    applications = db.relationship('Application', backref='applicant', lazy=True)
    favorites = db.relationship('Property', secondary='wishlist', backref='favorited_by', lazy='dynamic')

Esta foi minha primeira exposição real de como Python poderia ser usado para representar objetos do mundo real em código, e isso abriu um novo mundo de possibilidades para mim.


Mergulhando mais fundo: construindo a API imobiliária

Depois de ter um conhecimento básico de Python e programação orientada a objetos, decidi começar a construir a API Real Estate Listing. O objetivo era simples: criar uma API que permitisse aos proprietários listar propriedades e aos potenciais locatários/compradores navegar, inscrever-se e gerenciar suas propriedades favoritas. No entanto, atingir esse objetivo exigiu muito mais do que apenas os fundamentos.

Usando Flask para desenvolvimento de API RESTful

Flask, uma estrutura web leve para Python, tornou-se minha ferramenta preferida para construir a API. Adorei a simplicidade e flexibilidade do Flask; forneceu estrutura suficiente para me ajudar a começar sem me sobrecarregar com complexidade desnecessária.

Comecei configurando rotas para lidar com diferentes métodos HTTP, como GET, POST, PATCH e DELETE. Isso me permitiu implementar as principais operações CRUD (Criar, Ler, Atualizar, Excluir) para propriedades, usuários, aplicativos e listas de desejos. Uma das coisas que aprendi rapidamente foi a importância de retornar códigos de status HTTP apropriados com respostas. Por exemplo, uma solicitação POST bem-sucedida deve retornar o status 201 Criado, enquanto uma solicitação para um recurso inexistente deve retornar 404 Não Encontrado.

Aqui está um exemplo de rota que criei para buscar uma propriedade pelo seu ID:

@app.route('/properties/', methods=['GET'])
def get_property(id):
    property = Property.query.get(id)
    if property:
        return jsonify(property_schema.dump(property)), 200
    else:
        return jsonify({'error': 'Property not found'}), 404

Esse snippet me ajudou a entender como lidar com diferentes cenários e garantir que a API estava fornecendo feedback significativo ao cliente.

Implementando SQLAlchemy para interações de banco de dados

Outra parte crucial da construção desta API foi aprender como interagir com o banco de dados usando SQLAlchemy, uma ferramenta ORM (Mapeamento Objeto-Relacional) que une classes Python e bancos de dados SQL. Escolhi SQLAlchemy porque ele se integra bem ao Flask e simplifica muitos dos aspectos complexos do SQL, como criar e gerenciar relacionamentos entre tabelas.

Um dos aspectos técnicos mais úteis do SQLAlchemy que usei foi a criação de relacionamentos muitos para muitos. Por exemplo, em minha API Real Estate, os usuários podem adicionar várias propriedades aos favoritos, e cada propriedade pode ser favorita por muitos usuários. Para modelar isso, usei uma tabela de links chamada lista de desejos para gerenciar esse relacionamento muitos para muitos:

wishlist_table = db.Table('wishlist',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('property_id', db.Integer, db.ForeignKey('property.id'), primary_key=True)
)

Esse snippet me permitiu gerenciar com eficiência as relações usuário-propriedade sem criar dados redundantes. Usando as funções de relacionamento do SQLAlchemy, eu poderia facilmente consultar e gerenciar essas conexões.

Serialização com Flask-Marshmallow

Outra experiência de aprendizado importante foi usar Flask-Marshmallow para serializar meus modelos SQLAlchemy no formato JSON. A serialização converte tipos de dados complexos em um formato que pode ser facilmente transferido pela rede, o que é essencial para a construção de APIs. Usei esquemas Marshmallow para definir como meus modelos deveriam ser convertidos para JSON. Aqui está um exemplo de esquema para meu modelo de propriedade:

class PropertySchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Property
        load_instance = True

property_schema = PropertySchema()
properties_schema = PropertySchema(many=True)

O uso do Marshmallow simplificou o processo de conversão de meus modelos para JSON, permitindo que eu me concentrasse na construção da funcionalidade principal da API.


Olhando para trás: refletindo sobre a jornada

Olhando para trás, percebo o quão longe cheguei em pouco tempo. Quando comecei, eu mal conhecia o básico de Python. Agora, desenvolvi uma API completa que usa Flask, SQLAlchemy e Marshmallow e tenho um conhecimento muito mais profundo de desenvolvimento web.

Um dos aspectos mais gratificantes dessa jornada foi a sensação de resolução de problemas. Cada mensagem de erro, cada bug e cada comportamento inesperado me ensinaram algo novo. Seja descobrindo por que uma rota não estava funcionando, depurando um problema de conexão de banco de dados ou aprendendo como lidar adequadamente com o CORS, cada desafio me ajudou a crescer como desenvolvedor.

Mas talvez a lição mais importante que aprendi seja o valor da persistência. Houve momentos em que me senti preso ou frustrado, mas continuei avançando. Aprendi a dividir os problemas em partes menores e mais gerenciáveis ​​e a resolvê-los um por um.


Uma visão técnica útil: configuração do Flask CORS

Um aspecto técnico que achei particularmente útil foi configurar o Cross-Origin Resource Sharing (CORS) em meu aplicativo Flask. O CORS é crucial para permitir que aplicativos da web hospedados em domínios diferentes se comuniquem entre si. No meu caso, permitiu que o frontend (construído com React) fizesse solicitações à API backend sem ser bloqueado pela política de mesma origem do navegador.

Veja como configuro o CORS em meu aplicativo Flask:

from flask_cors import CORS

app = Flask(__name__)
CORS(app)

Simplesmente adicionando CORS(app), habilitei solicitações de origem cruzada para todas as rotas em meu aplicativo, o que tornou a integração entre meu frontend e backend muito mais suave. Este é um recurso pequeno, mas poderoso, que todo desenvolvedor web deve conhecer.


Conclusão

Construir a API de listagem de imóveis foi uma experiência desafiadora, mas imensamente gratificante. Aprendi muito sobre Python, SQL e desenvolvimento web e me sinto muito mais confiante em minhas habilidades como desenvolvedor. Estou animado para continuar construindo, aprendendo e crescendo nesta área e mal posso esperar para ver o que o futuro reserva.

Para quem está começando, meu conselho é simples: continue aprendendo, continue experimentando e não tenha medo de cometer erros. Cada desafio é uma oportunidade de crescimento e cada projeto é um passo à frente em sua jornada como desenvolvedor.

https://github.com/migsldev/real-estate-api

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/migsldev/reflective-blog-my-journey-building-a-real-estate-listing-api-390o?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3