شرکتی که شما در آن کار میکنید پروژهای مبتنی بر وب را برای یک کتابخانه آغاز کرده است و مقداری از کدهای سمت client را نوشته است. از شما خواسته شده تا این بخش را تکمیل کنید.
پروژه را از [اینجا](http://bayanbox.ir/download/9208364532547487174/bookstore.zip) دانلود کنید و از حالت فشرده خارج کنید.
برای اجرا، به جای باز کردن مستقیم `index.html` با مرورگر، حتماً پوشه اصلی پروژه را به وسیله یک وبسرور سرو کنید. یک راه ساده برای این کار استفاده از وبسرور پایتون است.
با پایتون ۲:
```
cd bookstore
python -m SimpleHTTPServer 8000
```
با پایتون ۳:
```
cd bookstore
python -m http.server 8000
```
با این دستورات، پوشه پروژه بر روی پورت ۸۰۰۰ سرو میشود. با مراجعه به آدرس `localhost:8000` پروژه را مشاهده کنید و صفحات مختلف آن را ببینید.
همانطور که میبینید ۳ صفحه وجود دارد:
1. صفحه اصلی که لیست کلیه کتابها در آن قرار دارد، با آدرس `http://localhost:8000/#`.
2. صفحه مشخصات یک کتاب، با آدرس `http://localhost:8000/#book/BOOK_ID`.
3. صفحه لیست کتابهای یک ژانر، با آدرس `http://localhost:8000/#genre/GENRE_NAME`.
اما مشکلی که وجود دارد این است که محتوای تمام این صفحات static است. از شما خواسته شده تا پروژه را طوری تغییر دهید که محتوای صفحات با درخواست ajax از `localhost:8000/api` دریافت شود.
ابتدا کدهای پروژه را بخوانید و با نحوه کار پروژه آشنا شوید. همانطور که میبینید از کتابخانههای [Hogan.js](http://twitter.github.io/hogan.js/) و [Navigo](https://github.com/krasimir/navigo) استفاده شده است. با باز کردن فایل `main.js` مشاهده میکنید که ۴ کار از شما به صورت TODO خواسته شده است. این ۴ کار را انجام دهید. سپس پروژه تکمیلشده را به صورت Zip فشرده کنید و به عنوان پاسخ آپلود کنید.
# توضیحات API
نمونههایی از پاسخ سرور API در پوشه `api` قرار داده شده است. نگاهی به فایلهای این پوشه بیندارید. با توجه به این که پروژه را با وبسرور سرو کردهاید، با فایلهای این پوشه، API شبیهسازی شده است و میتوانید با jQuery.get یا توابع مشابه، به آدرسهای زیر درخواست ajax بفرستید و پاسخ آن را دریافت کنید:
```
/api/get_all_books
/api/get_book/BOOK_ID
/api/get_genre_books/GENRE_NAME
```
برای آشنایی با ساختار JSON دریافتی از سرور نیز فایلهای موجود در پوشه `api` را ببینید.
همچنین توجه کنید که وبسرور، نوع پاسخی که ارسال میکند را json تعیین نمیکند. بنابراین هنگام صدا زدن jQuery.get، نوع پاسخ موردانتظار (dataType) را json تعیین کنید. و یا این که خودتان متن JSON دریافتی را parse کنید.
# نکته
دقت کنید که پروژه را به گونهای Zip کنید که فایل `index.html` و پوشههای `static` و `templates` در ریشه فایل Zip قرار داشته باشند (داخل پوشه دیگری نباشند).