Giter Site home page Giter Site logo

async-python-sprint-4's Introduction

P.S. Комментарий ревьюеру

Читал про библиотеку dependency-injector от нашего разработчика.
Решил сделать через неё для практики, вот такая солянка получилась)

Проектное задание четвёртого спринта

Спроектируйте и реализуйте сервис для создания сокращённой формы передаваемых URL и анализа активности их использования.

Кроме этого, выберите из списка дополнительные требования и тоже реализуйте их. У каждого задания есть определённая сложность, от которой зависит количество баллов. Вам необходимо выбрать такое количество заданий, чтобы общая сумма баллов была больше 4. Выбор заданий никак не ограничен: можно выбрать все простые или одно среднее и два простых, или одно продвинутое, или решить все.

Описание задания

Реализовать http-сервис, который обрабатывает поступающие запросы. Сервер стартует по адресу http://127.0.0.1:8080 (значение по умолчанию, можно изменять).

Список возможных эндпойнтов (можно изменять)
  1. Получить сокращённый вариант переданного URL.
POST /

Метод принимает в теле запроса строку URL для сокращения и возвращает ответ с кодом 201.

  1. Вернуть оригинальный URL.
GET /<shorten-url-id>

Метод принимает в качестве параметра идентификатор сокращённого URL и возвращает ответ с кодом 307 и оригинальным URL в заголовке Location.

  1. Вернуть статус использования URL.
GET /<shorten-url-id>/status?[full-info]&[max-result=10]&[offset=0]

Метод принимает в качестве параметра идентификатор сокращённого URL и возвращает информацию о количестве переходов, совершенных по ссылке.

В ответе может содержаться как общее количество совершенных переходов, так и дополнительная детализированная информация о каждом переходе (наличие query-параметра full-info и параметров пагинации):

  • дата и время перехода/использования ссылки;
  • информация о клиенте, выполнившем запрос;

Дополнительные требования (отметьте [Х] выбранные пункты):

  • (1 балл) Реализуйте метод GET /ping, который возвращает информацию о статусе доступности БД.
  • (1 балл) Реализуйте возможность «удаления» сохранённого URL. Запись должна остаться, но помечаться как удалённая. При попытке получения полного URL возвращать ответ с кодом 410 Gone.
  • (2 балла) Реализуйте middlware, блокирующий доступ к сервису из запрещённых подсетей (black list).
  • (2 балла) Реализуйте возможность передавать ссылки пачками (batch upload).
Описание изменений
  • Метод POST /shorten принимает в теле запроса список URL в формате:
[
    {
        "original-url": "<URL-for-shorten>"
    },
    ...
]

... и возвращает данные в следующем формате:

[
    {
        "short-id": "<shoten-id>",
        "short-url": "http://...",
    },
    ...
]
  • (3 балла) Реализуйте взаимодействие с сервисом авторизованного пользователя. Пользователь может создавать как приватные, так и публичные ссылки или изменять видимость ссылок. Вызов метода GET /user/status возвращает все созданные ранее ссылки в формате:
[
    {
        "short-id": "<text-id>",
        "short-url": "http://...",
        "original-url": "http://...",
        "type": "<public|private>"
    },
    ...
]
  • **(5 баллов) Реализуйте кастомное взаимодействия с БД. Необходимо учесть возможность работы с транзакциями.

Требования к решению

  1. Используйте фреймворк FastAPI. В качестве СУБД используйте PostgreSQL (не ниже 10 версии).
  2. Используйте концепции ООП.
  3. Предусмотрите обработку исключительных ситуаций.
  4. Приведите стиль кода в соответствие pep8, flake8, mypy.
  5. Логируйте результаты действий.
  6. Покройте написанный код тестами.

async-python-sprint-4's People

Contributors

dependabot[bot] avatar quantum73 avatar

Watchers

 avatar

async-python-sprint-4's Issues

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.