Skip to content

Latest commit

 

History

History

homework-03

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Домашно 3

Краен срок: 22.01.2023, 23:59

Задачата ни този път е фокусирана върху HTTP и Design Patterns, които бяха и последните теми от курса.

За разлика от предните задачи, този път няма да има автоматични референтни тестове, готови интерфейси, които да имплементирате или фиксирана от нас структура на проекта - имате цялата свобода, що се отнася до дизайна, имплементацията и тестването.

News Feed 📰

Създайте програма, която предоставя възможност за търсене на новини по различни критерии.

REST API-то, което ще използваме за намиране на новини, е публично, безплатно и работи с API Key, който може да вземете след регистрация.

Необходимият ви endpoint e /v2/top-headlines, документиран тук.

API-то има свои лимити - можете да правите до 100 заявки на ден, заради което ще се наложи да обмислите и оптимизирате използването му, докато разработвате и тествате.

Дизайн

Както казва чичото на Спайдърмен: "With Great Power Comes Great Responsibility". Този път, вие определяте абстракциите, които ще използвате. Единственото условие е, да приложите знанията си за design patterns (използвайте поне един, за повече удачно приложени design patterns, ще получите бонус), като задачата предразполага в това отношение.

Функционалност

Критериите, по които можем да търсим новини, са:

  • ключови думи (задължителен параметър)
  • категория
  • държава

Както може да видите в документацията на News API-то, то поддържа задължителни и опционални параметри - имплементацията ви също трябва да работи така - например, трябва да позволява търсене по ключови думи и категория, но не и само по държава.

Странициране

Когато едно API може да върне голям брой резултати, обикновено (от performance съображения) то не го прави на един път, а използва т.нар. странициране - връща резултатите на части (страници), като първо извличаме първа страница, после втора и т.н.

Вътрешната имплементация на вашата програма трябва да взима резултатите от поне две страници - вие решавате колко страници и по колко резултата максимум да вземете - единствено трябва да се съобразите с лимитите на безплатната версия на API-то. Например, искам всички новини, свързани с Netflix - не е нужно да подавам номер на страница, нито пък ме интересува, че ако има 150 резултата, ще мога да получа само 100, колкото-толкова.

⚠️ Важно: Имайте предвид лимита от 100 request-a на ден, при имплементиране и тестване на тази част от задачата. :warning: Важно: Освен това, ако дадените резултати са повече от 100, има вероятност да не може да вземете всички от тях (отново документирано ограничение на API-то).

Error handling

При изпращане на request към сървъра, обработката му не винаги е успешна. Когато нещо се обърка, сървърът връща подходящ статус код и съобщение, които следва да обработвате. Моделирайте тази функционалност с помощта на custom checked exceptions. Различните грешки, които могат да се върнат, може да разгледате тук

Тестване

Сами отговаряте за цялостното тестване на решението си, ние пък ще оценяваме колко добре сте се справили с това. Целете се към висок code coverage, както и покрийте всички възможни сценарии, които вашата програма поддържа, включително такива, които могат да ви се сторят тривиални. За постигане на висок code coverage, може да се наложи да използвате Mockito.

Предаване

За да предадете решението си, архивирайте в zip архив src и test директориите на проекта и го качете в съответния assignment в грейдъра.

Оценяване

Решението може да ви донесе до 100 точки, като ще бъде оценявано за:

  • функционална пълнота и коректност, и за автоматични тестове с добър code coverage (50% от оценката)
  • добър обектно-ориентиран дизайн, спазване на правилата за чист код и подбиране на оптимални за задачата design patterns и структури от данни (50% от оценката)

Успех! 🍀