شمارش درخواستهای یک کاربر به سامانهی غذای دانشگاه در چین یکی از سختترین کارهایی است که میتواند اتفاق بیافتد. امروزه چینیها بهدنبال ایجاد یک API برای شمارش اتوماتیک و نرمافزاری غذاهایی هستند که ملت بهصورت رایگان از سلف دانشگاه خود سفارش میدهند!
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
توجه کنید که شما باید از راهحل این سؤال در سؤالات بعدی نیز استفاده کنید.
ایپیآی
در ابتدا به یک API نیاز داریم که بتواند بر اساس کد ملی منحصر به هر فرد، تعداد درخواستهای غذای او را بشمرد. این API باید در پورت 80 و در مسیر / در دسترس باشد؛ بهشکلی که با ارسال یک ریکوئست به این آدرس به همراه یک هدر CLIENT-KEY باید تعداد ریکوئستهای او بهروزرسانی شده و در پاسخ، تعداد کل ریکوئستها توسط همهی کاربران را در کلیدی به نام "state" برگراند. بهعنوان مثال:
$ curl -H "CLIENT-KEY: one" localhost
{'state': {'one': 1}}
$ curl -H "CLIENT-KEY: one" localhost
{'state': {'one': 2}}
$ curl -H "CLIENT-KEY: two" localhost
{'state': {'one': 2, 'two': 1}}
نصب نیازمندیها و اجرا
برای حل این سؤال میتوانید از هر زبان و هر تکنولوژیای که میخواهید استفاده کنید. بهصورتی که در یک پوشه به نام api کد برنامه را نوشته و در فایلی به نام runner.sh که توسط sh اجرا میشود، باید برنامهی خود را اجرا کنید. توجه کنید که حتماً باید Dockerfile مربوط به پروژهی خود را برای ما ارسال کنید.
در پروژهی اولیه، ۴ داکرفایل برای php، python، golang و node قرار دادیم که میتوانید از آنها مستقیماً استفاده کنید. در صورتی که از یکی از این زبانها برای حل سؤال استفاده میکنید، کافیست که Dockerfile مربوط به آن را در پوشهی api کپی کنید و طبق توضیحات داده شده، سؤال را حل کنید. برای نصب نیازمندیهای پایتون از requirements.txt، برای پیاچپی از composer.json، برای گولنگ از go.mod و برای نودجیاس از package.json استفاده کنید.
در صورتی که زبان مورد استفادهی شما، چیزی به جز این ۴ مورد است، باید خودتان داکرفایلی در پوشهی api بهشکلی بنویسید که بتواند نیازمندیهای پروژهی شما را نصب کرده و برنامهی شما را مانند داکرفایلهای موجود اجرا کند.
تغییر Dockerfile
شما آزادید که Dockerfile را به هرصورتی که علاقمندید تغییر دهید. در صورتی که با داکر و داکرفایل آشنایی ندارید، هم کافیست که با استفاده از توضیحات داده شده صرفاً با پیادهسازی این API سؤال را حل کنید.
فرد بیهویت
نکتهی مهمی که در این API وجود دارد این است که درصورتی که هدر CLIENT-KEY وجود نداشت، آخرین وضعیت باید در پاسخ برگردانده شود. درواقع تعداد ریکوئستهایی که فردی بیهویت به API میزند شمرده نمیشود.
$ curl localhost
{'state': {'one': 2, 'two': 1}}
نحوه ارسال پاسخ
شما میتوانید تمامی محتوای موجود در پوشهی api را تغییر دهید و هر فایلی که میخواهید اضافه یا کم کنید.
api
├── api.py # or main.go somefile.js anyfile.php name.any ...
├── Dockerfile
├── requirements.txt # or go.mod package.json composer.json
└── runner.sh
توجه کنید که نام فایل کد شما برای سیستم داوری اهمیتی ندارد و این خود شما هستید که در runner.sh از نام آن برای اجرای پروژه استفاده میکنید.
در نهایت این پوشه را zip کرده و ارسال کنید. توجه کنید که پس از extract کردن فایل zip شما، باید پوشهی api را ببینیم که درون آن Dockerfile وجود دارد.
ارسال پاسخ برای این سؤال