استفاده از json-server برای API تست

سلام ✋اول از همه بگم این اولین تجربه من در نوشتن مطلب توی ویرگول هست و ممکنه بعد از خوندن این مطلب خوشتون نیاد یا اصلا دلتون نخواد کامل بخونیدش ? ، یکی از اهدافم این بود که نوشتن رو شروع کنم و سعی کنم هر روز بهترش کنم. ازتون خواهش میکنم اگر انتقادی دارید بهم بگید تا بتونم مطالب بهتری رو ارائه بدم ??.میخوام راجع به یکی از تجربه های خودم در استفاده از یک کتابخونه فوق العاده که میتونه سرعت توسعتون رو قبل آماده شدن api اصلی برنامه بالا ببره صحبت کنم.تجربه من این بود که روی فرانت ریکت استفادش کردم شما میتونید هر مدلی که دلتون خواست ازش استفاده کنید.کتابخونه ای که میخوام بهتون معرفی کنم اسمش json server هست که یک api کامل به صورت فیک بهتون ارائه میده و میتونید تمام تست های برنامتون رو از طریق این کتابخونه انجام بدید و بعد از آماده شدن api اصلی تنها کاری که میکنید عوض کردن آدرس api هست.خوبی این کتابخونه اینه که تمامی متد هارو داره و میتونید داخلش موجودیت هارو تعریف کنید و با استفاده از متد های مختلف دیتا ها رو بخونید یا ایجاد، ویرایش و حذف کنید.پیش نیاز هانصب NodeJs1️⃣ نصب json serverبا استفاده از دستور زیر json server رو بصورت global روی سیستمون راه اندازی کنید.npm install -g json-server2️⃣ ساخت فایل db.json و اضافه کردن دیتاهر جایی که دلتون خواست یک فایل با پسوند json ایجاد کنید، برای نمونه من فایل db.json رو ایجاد کردم و داخل اون مقادیر زیر رو وارد کردم{ &quotposts&quot: [ { &quotid&quot: 1, &quottitle&quot: &quotjson-server&quot, &quotauthor&quot: &quottypicode&quot,&quotviews&quot:3 } ], &quotcomments&quot: [ { &quotid&quot: 1, &quotbody&quot: &quotsome comment&quot, &quotpostId&quot: 1 } ], &quotprofile&quot: { &quotname&quot: &quottypicode&quot } }3️⃣ استارت سرویس json serverبعد از سیو کردن فایل ما 3 موجودیت ساختیم به نام های posts , comments , profile حالا وارد پوشه ای که فایل رو داخلش ساختیم میشیم و از طریق cli دستور زیر رو اجرا می کنیم json-server --watch db.jsonخب json server روی پورت 3000 لوکالتون اجرا میشه و می تونید از طریق آدرس http://localhost:3000/posts/1 مقادیر posts با id=1 رو به صورت زیر ببینید{ &quotid&quot: 1, &quottitle&quot: &quotjson-server&quot, &quotauthor&quot: &quottypicode&quot } میبینید که خیلی راحت با متد GET تونستید اطلاعات مطالب (posts) رو دریافت کنید حالا میتونید این رو روی comments و profile هم به صورت زیر امتحان کنیدhttp://localhost:3000/commentshttp://localhost:3000/comments/1http://localhost:3000/profileمسیرها (Routes)Plural GET /posts GET /posts/1 POST /posts PUT /posts/1 PATCH /posts/1 DELETE /posts/1 Singular GET /profile POST /profile PUT /profile PATCH /profileفیلتربرای فیلتر کردن میتونید از . استفاده کنید GET /posts?title=json-server&author=typicode GET /posts?id=1&id=2 GET /comments?author.name=typicodeصفحه بندی (Paginate)با استفاده از _page و _limit میتونید دیتا های خروجی رو صفحه بندی کنیدمقدار پیشفرض limit برای صفحه بندی 10 است.GET /posts?_page=7 GET /posts?_page=7&_limit=20میتونید تعداد صفحات ، صفحه بعدی و صفحه قبلی رو از طریق مقدار Link که توی Header وجود داره دریافت کنیدJson server paginateمرتب سازی (Sort)برای مرتب سازی میتونید از _sort و _order استفاده کنیدGET /posts?_sort=views&_order=asc GET /posts/1/comments?_sort=votes&_order=ascبرای استفاده همزمان روی چند فیلد میتونید به صورت زیر استفاده کنیدGET /posts?_sort=user,views&_order=desc,ascبرش (Slice)با استفاده از _start و _end یا _limit میتوانید دیتا های خود را به صورت شخصی سازی شده دریافت کنید، از طریق مقدار X-Total-Count در Header تعداد دیتا ها در Response را دریافت کنید.GET /posts?_start=20&_end=30 GET /posts/1/comments?_start=20&_end=30 GET /posts/1/comments?_start=20&_limit=10عملگر ها (Operators)با استفاده از _gte و _lte میتوانید فیلد ها را به صورت Range فیلتر کنید GET /posts?views_gte=10&views_lte=20در مثال بالا مطالبی که تعداد بازدید آن ها بین 10 تا 20 باشد نمایش داده می شودبا استفاده از _ne تمامی دیتا ها که شرط مقدار _ne را ندارند نمایش داده می شود برای مثال در Request زیر تمامی مطالب به جز مطلبی که id اون برابر 1 هست نمایش داده میشنGET /posts?id_ne=1با استفاده از _like می توانید رکورد فیلدی که مقدارش شبیه به مقدار _like هست رو دریافت کنیدGET /posts?title_like=serverدر مثال بالا فقط مطالبی نمایش داده می شوند که از کلمه server داخل عنوانشون استفاده شده باشهجستجو در همه فیلد هابا استفاده از پارامتر q مقدار ورودی در تمامی رکورد ها جستجو می شود و رکوردی که مقدار یکی از فیلدهاش برابر با مقدار q باشه نمایش داده میشه GET /posts?q=internetارتباطات (Relationships)با استفاده از _embed میتوانید رکوردهای موجودیتی که به والد متصل شده اند (Many to one) را دریافت کنیدGET /posts?_embed=comments GET /posts/1?_embed=commentsبا استفاده از _expand میتوانید رکوردهای موجودیتی که به فرزند متصل شده اند (One to many) را دریافت کنیدبرای دریافت یا ایجاد موجودیت هایی که با هم ارتباط دارند می توانید به صورت زیر عمل کنید که در بخش اول توضیح داده شد.GET /posts/1/comments POST /posts/1/commentsدیتابیس با وارد کردن /db میتوانید تمامی موجودیت ها و رکوردهاشون رو دریافت کنیدGET /dbصفحه اصلی نمایش فایل پیشفرض index که میتوانید با ایجاد یک دایرکتوری به نام public در کنار فایل json و ایجاد فایل index آن را مشاهده کنید.GET /موارد اضافی فایل های استاتیکشما میتونید داخل json server از فایل های html ، css ، javascript یا تصاویر و ویدیو ها استفاده کنید کافیه یک دایرکتوری کنار فایل json به نام public ایجاد کنید، همچنین میتونید از طریق پارامتر --static در زمان اجرای json server مقدار پیشفرض دایرکتوری فایل هاتون رو تغییر بدید.mkdir public echo 'hello world' > public/index.html json-server db.jsonjson-server db.json --static ./some-other-dirتغییر پورتبه صورت پیشفرض پس از اجرای json server سرویس بر روی پورت 3000 اجرا می شود که شما می توانید با دستور زیر پورت پیشفرض را تغییر دهیدjson-server --watch db.json --port 3004شما می توانید فایل json را به صورت ریموت فراخوانی کنید json-server http://example.com/file.json json-server http://jsonplaceholder.typicode.com/dbایجاد دیتا Randomشما میتوانید به جای فایل json از فایل js استفاده کنید و دیتا رو به صورت تصادفی ایجاد کنید// index.js module.exports = () => { const data = { users: [] } // Create 1000 users for (let i = 0; i < 1000; i++) { data.users.push({ id: i, name: `user${i}` }) } return data }و به صورت زیر اجرا کنیدjson-server index.jsاضافه کردن route های customبا ایجاد فایل routes.json در روت دایرکتوری json server میتوانید route ها را شخصی سازی کنید { &quot/api/*&quot: &quot/$1&quot, &quot/:resource/:id/show&quot: &quot/:resource/:id&quot, &quot/posts/:category&quot: &quot/posts?category=:category&quot, &quot/articles\\?id=:id&quot: &quot/posts/:id&quot } و به صورت زیر سرویس json server رو استارت کنیدjson-server db.json --routes routes.jsonحالا میتونید به صورت زیر به دیتا هاتون دسترسی داشته باشید /api/posts # → /posts /api/posts/1 # → /posts/1 /posts/1/show # → /posts/1 /posts/javascript # → /posts?category=javascript /articles?id=1 # → /posts/1دستور های دیگر json-server [options] <source> Options: --config, -c Path to config file [default: &quotjson-server.json&quot] --port, -p Set port [default: 3000] --host, -H Set host [default: &quotlocalhost&quot] --watch, -w Watch file(s) [boolean] --routes, -r Path to routes file --middlewares, -m Paths to middleware files [array] --static, -s Set static files directory --read-only, --ro Allow only GET requests [boolean] --no-cors, --nc Disable Cross-Origin Resource Sharing [boolean] --no-gzip, --ng Disable GZIP Content-Encoding [boolean] --snapshots, -S Set snapshots directory [default: &quot.&quot] --delay, -d Add delay to responses (ms) --id, -i Set database id property (e.g. _id) [default: &quotid&quot] --foreignKeySuffix, --fks Set foreign key suffix, (e.g. _id as in post_id) [default: &quotId&quot] --quiet, -q Suppress log messages from output [boolean] --help, -h Show help [boolean] --version, -v Show version number [boolean] Examples: json-server db.json json-server file.js json-server http://example.com/db.jsonامیدوارم که از این مطلب لذت برده باشید منبع : https://github.com/typicode/json-server