تعریف پروژه
تعریف پروژه نسبتاً ساده است، ساختن یک API که تحت اینترنت یا اینترانت کاربرها یا دستگاهها بتونن سرویس موردنظرشون رو با هرمشخصاتی که داره تعریفکنند، اطلاعات بهش ارسالکنند و بتونند بعضی گزارشها رو از اطلاعاتشون بگیرن.
طبیعتاً این سرویس کمی فاصله داره با چیزی که بهصورت فنی بشه بهش گفت: «سرویس اینترنت اشیاء» اما فعلاً ما به همین اسم صداش میزنیم!
این سرویس اینترنت اشیاء چکاری قراره انجام بده؟
فرضکنید یک Gsm Modem دارید که قراره اطلاعات دما و رطوبت و طول و عرض جغرافیایی که از GPS گرفتید رو بفرسته به سروری و اونجا نمایشبدیم.
چطور ارسال میکنید؟ و چطور نمایش میدید؟
ما قراره در این مقاله و قسمت دوم اون دو پروژه رو معرفیکنیم که با ترکیب این دو بتونید دو مشکلبالا رو حلکنید!هرچند پروژه فعلاً در مقیاس کوچکی تعریفشده اما میتونه پایه و اساس پروژههای بزرگی باشه که در این حیطه میتونند کاربرد داشته باشند.
خطر تخصصیشدن مطلب!
خوشبختانه تااینجا موفقشدم مطلب رو بدون ذکر کلماتتخصصی پیشببرم! اما از اینجا بهبعد ممکنه یکم مقاله برای عاشقان سیم و هویه گیجکننده باشه، امیدوارم تا آخرش دووم بیارید!
چالش
چرا این پروژه برای من چالش بود؟ من یک فریمورک به اسم Net Core. رو انتخابکردم برای ساختن این پروژه. اولین نسخه این فریم ورک اواسط ۲۰۱۶ توسط مایکروسافت ریلیز شد(که مشخصاً از دنیای .Net اومده) اما خوشبختانه Cross-Platform هست به اینمعنیکه شما اگه تمایلداشتهباشید میتونید روی سروری با سیستمعامل لینوکس، ویندوز و یا حتی mac os اون رو نصبکنید، عالینیست؟
و جهت یادآوری باید بگم که Net. سالها بهعنوان انحصار ویندوز و اونهم فقط درشرایطیکه قبلاز اجرا کل فریمورک Net. رو نصبمیکردید قابلاجرا بود و همچین انقلابی مثلاینکه ژنرال باتیستا بیاد درکنار چهگوارا ضدسرمایهداری مبارزهکنه! (البته نه به این شدت! اما مهماینهکه درحالحاضر مایکروسافت بزرگترین حمایتکننده و انتشاردهنده متنباز در دنیاست!)
اما قسمت چالش برای من این بود که برای اولینبار میخواستم یک محصول ذاتاً ویندوزی رو با ابزار کاملاًرایگان و جدید روی لینوکس توسعهبدم، و برای اینکه بامزهتر هم بشه از دیتابیس محبوبم یعنی SQL Server جدا شدم و از Postgre که برای من تاالان ناشناسبوده استفادهکنم و سختترین قسمتش اینکه چون دوستداشتم پروژه رو بهصورت متنباز منتشرکنم، سعیکنم با کیفیتبالا کد رو بنویسم، استانداردها رو رعایتکنم و همه اون کارهای نامناسبی که توی محیطکار روزمره بخاطر فرصتکم یا خصوصیبودن سورسها ممکنه انجامبدیم رو ازش پرهیز کنم.
ابزارها
من توی توسعه این قسمت از پروژه از این ابزار استفادهکردم:
- طبیعتاً در مرحله اول SDK مربوط به Net Core 2.
- VS Code به عنوان محیط توسعه پروژه
- Postgre که همونطور که گفتم به عنوان پایگاه داده
- Dbeaver که یکی از محیط های گرافیکی رایگان استفاده از Postgre هست و در مقایسه با PgAdmin امکانات مناسب تری داره.
- Postman به عنوان ابزار تست API
و البته که تمامی ابزارهایبالا نات آنی رایگان هستند بات آلسو متنباز هم هستند و میتونید روی گیتهاب به آسونی پیداشون کنید!
قابلیتها
این API که حکم موتور پروژه رو داره این قابلیتها رو بهتون میده:
- ثبتنام و ورود
- تعریف، ویرایش و حذف سرویس و مشخصهها (برای مثال؛ من سرویسی به اسم دماسنج میتونم تعریفکنم و بگم این سرویس دوتا مشخصه به اسم دما و رطوبت رو قراره از دستگاه دریافتکنه)
- تعریف دستگاهها یا کاربران که مشخصمیکنه چهکسانی حق استفادهاز این سرویس رو دارند.
- متدی برای دریافت اطلاعات از دستگاهها بهصورت JSON و یا بااستفادهاز URL
- خروجی دادههای دریافتشده
API چیه؟ JSON از کجا بخریم و چند آمپر جریان کشی داره؟!!
ازاونجاییکه موقع توسعه پروژه میدونستم اگه قراره همه یا قسمتی از مخاطبان احتمالی اون دوستان سختافزاری باشن، نوشتن یک API تنها، مثل حلقه قدرت توی فیلم ارباب حلقههاست، خیلی پرکاربرده اما اگه نتونی ازش استفاده کنی نهایتاً در آتش کوه موردور میسوزه!
برای همین تصمیمگرفتم همزمان با تکمیل API یک پروژه دیگه رو در کنارش شروعکنم که بجای اینکه کاربر رو درگیر پیچیدگیهای کار با API کنه، یه واسط کاربری فوقالعاده بهش بده تا اون اینکار رو براش انجامبده!
اما اگه کسی علاقهمند باشه میتونه بااستفادهاز Postman و خروجی نمونهای که توی پروژه گذاشتم نحوه تست همه توابع رو ببینه و یا با مقادیر جدید امتحانشکنه.
درمورد پروژهدوم توی مقالهی بعدی توضیحمیدم از اینکه مقاله رو چندبار بخونید خجالتنکشید، نظرات و سوالات شما میتونه انگیزهای بده برای تکمیلکردن و ادامهدادن این سیستم، البته شاید هم انتظارم از مهندسین الکترونیک زیاده؟
منبع:سیسوگ