Giter VIP home page Giter VIP logo

book-api's Introduction

Book Api

Требования к системе.

  • python3
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.10
  • virtualenv
python3 -m pip install --user virtualenv

Установка

В корневой директории выполнить:

chmod a+x install.sh
./install.sh
chmod a+x run.sh

Запуск.

./run.sh

book-api's People

Contributors

yonnico avatar

Watchers

 avatar

book-api's Issues

Залочить версии пакетов с помощью pip-tools

Не забудь удалить папку venv перед переходом, чтобы у тебя все сработало корректно

  1. Установить пакет pip-tools, смотри https://pypi.org/project/pip-tools/ -> Installation
  2. Создать файл setup.py в корневой директории, смотри https://flask.palletsprojects.com/en/2.1.x/patterns/distribute/#basic-setup-script
  3. Залочить версии с помощью pip-compile с использованием хешей, смотри https://pypi.org/project/pip-tools/ -> Example usage for pip-compile и Using hashes
  4. Установить зависимости с помощью pip-sync

export FLASK_APP=api перенести в run.sh перед запуском flask run

Растащить функции по разным файлам

Структура должна получиться такая:

.gitignore
README.md
install.sh
run.sh
api
 | __init__.py
 | app
    | __init__.py
 | book
    |  __init__.py
    |  db.py
    |  services.py
 | author
    |  __init__.py
    |  db.py
    |  services.py

Используемая документация:

Что должно лежать в app/__init__.py?

Все что связано с приложением (ресурсы, авторизация, настройка), КРОМЕ запуска

Что должно лежать в api/__init__.py?

Запуск приложения

from api.app import app

if __name__ == '__main__':
    app.run(debug=True)
Как импортировать?

from <источник> import <переменная|функция>

Источник строится по пути директорий, например api.book.db

Импортить можно любые объявленные переменные и функции

Как запустить?

Нужно подсказать фласке, откуда производить запуск, для этого запусти команду в терминале export FLASK_APP=api

Здесь api это название нашей основной директории

Не забудь добавить эту команду в ./install.sh

Изменить ресурсы

Изменить получение связанных сущностей с отдельных ресурсов на использование GET-параметров

Например, для получения книг с авторами сделан отдельный ресурс /book/api/v1.0/books_with_author, нужно:

  1. Убрать этот ресурс
  2. Спроектировать GET-параметр в основном ресурсе для изменения логики, например with-authors
  3. Получить значения GET-параметра в функции через request.args.get('<название параметра>')
  4. Изменить логику с помощью if, чтобы при передаче этого параметра отдавались книги с авторами, а если он не передается, то просто книги
  • Получение всех книг с авторами
  • Получение одной книги с автором
  • Получение авторов с книгами
  • Получение автора с книгами

Прописать GET-параметры в Wiki

Фиксы

  • Упростить код

author = list(filter(lambda author: author['id'] == book['author_id'], all_authors))

  • Получение книг должно возвращать только книги
  • Для получения книг с авторами нужно сделать дополнительный route, например books_with_authors
  • Получение авторов должно возвращать только авторов
  • Получение книги должно отдавать только книгу, не массив
  • Для получения книги с автором нужно сделать дополнительный route
  • Получение автора должно возвращать только автора, не массив
  • Для получения автора с книгами нужно сделать дополнительный route
  • В создании и изменении книги author_id нужно проверять поиском этого автора, а не по длине массива
  • Добавить дополнительные функции find_book_by_id и find_author_by_id, чтобы убрать повторения

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.