ساخت API برای قیمت طلا با PHP
در دنیای امروز، دسترسی سریع و آسان به اطلاعات قیمت طلا برای بسیاری از کسبوکارها، وبسایتها و اپلیکیشنها ضروری است. یک API (Application Programming Interface) میتواند این امکان را فراهم کند تا به طور خودکار و برنامهریزیشده به این اطلاعات دسترسی پیدا کرد. این مقاله به بررسی گامبهگام ساخت یک API برای قیمت طلا با استفاده از زبان برنامهنویسی PHP میپردازد. هدف از این API، ارائه قیمتهای بهروز طلا در قالب JSON است.
۱. پیشنیازها
قبل از شروع، اطمینان حاصل کنید که پیشنیازهای زیر را دارید:
- یک سرور وب با PHP نصب شده (مانند Apache یا Nginx)
- یک پایگاه داده (مانند MySQL یا PostgreSQL) – اختیاری، برای ذخیره قیمتهای تاریخی
- دانش پایه PHP و JSON
- یک ویرایشگر کد (مانند VS Code، Sublime Text یا PHPStorm)
۲. طراحی API
اولین قدم، طراحی API است. باید مشخص کنید که API شما چه نقاط پایانی (endpoints) خواهد داشت و چه پارامترهایی را میپذیرد. برای این مثال، یک نقطه پایانی ساده برای دریافت قیمت فعلی طلا در نظر میگیریم:
- Endpoint:
/gold-price - Method: GET
- Parameters: (هیچ پارامتری در این مثال)
- Response: JSON حاوی قیمت طلا (مثلاً قیمت هر گرم، هر مثقال و هر اونس)
۳. جمعآوری دادههای قیمت طلا
برای ارائه قیمتهای بهروز طلا، نیاز به یک منبع داده قابل اعتماد دارید. میتوانید از APIهای ارائه دهنده قیمت طلا استفاده کنید (که در این مقاله فرض بر این است که شما به یک منبع داده دسترسی دارید) یا دادهها را از وبسایتهای معتبر استخراج کنید (web scraping). در این مثال، فرض میکنیم که شما یک تابع به نام getGoldPrice() دارید که قیمتهای طلا را از یک منبع معتبر دریافت میکند و آنها را به صورت آرایه PHP برمیگرداند.
مثال تابع getGoldPrice() (این تابع باید با منبع داده واقعی شما جایگزین شود):
function getGoldPrice() {
// این قسمت باید با کد واقعی برای دریافت قیمت طلا از منبع داده جایگزین شود
$goldPrice = [
'gram' => 7150000,
'mesghal' => 29800000,
'ounce' => 2300
];
return $goldPrice;
}
۴. پیادهسازی API با PHP
حالا میتوانیم API را با استفاده از PHP پیادهسازی کنیم. یک فایل PHP ایجاد کنید (مثلاً gold_api.php) و کد زیر را در آن قرار دهید:
<?php
header('Content-Type: application/json');
function getGoldPrice() {
// این قسمت باید با کد واقعی برای دریافت قیمت طلا از منبع داده جایگزین شود
$goldPrice = [
'gram' => 7150000,
'mesghal' => 29800000,
'ounce' => 2300
];
return $goldPrice;
}
if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['REQUEST_URI'] == '/gold-price') {
$goldPrice = getGoldPrice();
echo json_encode($goldPrice);
} else {
http_response_code(404);
echo json_encode(['error' => 'Endpoint not found']);
}
?>
توضیحات کد:
header('Content-Type: application/json');: این خط، هدر HTTP را تنظیم میکند تا به مرورگر یا کلاینت اطلاع دهد که پاسخ در قالب JSON است.getGoldPrice(): این تابع (که قبلاً توضیح داده شد) قیمتهای طلا را دریافت میکند.if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['REQUEST_URI'] == '/gold-price'): این شرط بررسی میکند که درخواست از نوع GET باشد و نقطه پایانی مورد نظر/gold-priceباشد.echo json_encode($goldPrice);: این خط، آرایه PHP حاوی قیمتهای طلا را به قالب JSON تبدیل میکند و آن را به عنوان پاسخ ارسال میکند.http_response_code(404);: اگر نقطه پایانی مورد نظر پیدا نشد، کد وضعیت HTTP را به 404 (Not Found) تنظیم میکند.echo json_encode(['error' => 'Endpoint not found']);: در صورت عدم یافتن نقطه پایانی، یک پیام خطا در قالب JSON ارسال میشود.
۵. تست API
برای تست API، میتوانید از یک ابزار مانند Postman یا curl استفاده کنید. یک درخواست GET به آدرس /gold-price ارسال کنید. اگر همه چیز به درستی کار کند، باید یک پاسخ JSON حاوی قیمتهای طلا دریافت کنید.
مثال استفاده از curl:
curl http://your-server/gold_api.php/gold-price
نکته: به جای http://your-server/gold_api.php/gold-price، آدرس سرور و مسیر فایل PHP خود را قرار دهید.
۶. بهبود API
API که در بالا پیادهسازی کردیم، یک API ساده است. برای بهبود آن، میتوانید موارد زیر را در نظر بگیرید:
- ذخیره قیمتهای تاریخی: با استفاده از یک پایگاه داده، میتوانید قیمتهای طلا را در طول زمان ذخیره کنید و امکان دسترسی به قیمتهای تاریخی را فراهم کنید.
- پارامترهای اضافی: میتوانید پارامترهای اضافی به API اضافه کنید، مانند واحد پول، نوع طلا (مثلاً طلای 18 عیار، 24 عیار) و تاریخ.
- احراز هویت: برای محافظت از API خود، میتوانید از احراز هویت (authentication) استفاده کنید. این کار به شما امکان میدهد تا دسترسی به API را محدود کنید و فقط به کاربران مجاز اجازه دهید از آن استفاده کنند.
- محدودیت نرخ (Rate Limiting): برای جلوگیری از سوء استفاده از API، میتوانید محدودیت نرخ را اعمال کنید. این کار به شما امکان میدهد تا تعداد درخواستهایی که یک کاربر میتواند در یک بازه زمانی مشخص ارسال کند را محدود کنید.
- کش (Caching): برای بهبود عملکرد API، میتوانید از کش استفاده کنید. این کار به شما امکان میدهد تا پاسخهای API را برای مدت زمان مشخصی ذخیره کنید و از ارسال درخواستهای مکرر به منبع داده جلوگیری کنید.
- مستندسازی (Documentation): یک مستندسازی کامل برای API خود ایجاد کنید تا به توسعهدهندگان دیگر کمک کنید تا به راحتی از آن استفاده کنند.
۷. ذخیره قیمتهای تاریخی در پایگاه داده (MySQL)
برای ذخیره قیمتهای تاریخی، میتوانید از یک جدول در پایگاه داده MySQL استفاده کنید. یک جدول به نام gold_prices ایجاد کنید با ستونهای زیر:
id(INT, PRIMARY KEY, AUTO_INCREMENT)timestamp(TIMESTAMP)gram(DECIMAL)mesghal(DECIMAL)ounce(DECIMAL)
سپس، تابع getGoldPrice() را بهروزرسانی کنید تا قیمتها را در پایگاه داده ذخیره کند:
function getGoldPrice() {
// این قسمت باید با کد واقعی برای دریافت قیمت طلا از منبع داده جایگزین شود
$goldPrice = [
'gram' => 7150000,
'mesghal' => 29800000,
'ounce' => 2300
];
// اتصال به پایگاه داده
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// درج قیمتها در پایگاه داده
$sql = "INSERT INTO gold_prices (timestamp, gram, mesghal, ounce) VALUES (NOW(), " . $goldPrice['gram'] . ", " . $goldPrice['mesghal'] . ", " . $goldPrice['ounce'] . ")";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
$conn->close();
return $goldPrice;
}
نکته: به جای مقادیر placeholder (your_username، your_password، your_database)، اطلاعات اتصال به پایگاه داده خود را قرار دهید.
۸. نتیجهگیری
ساخت یک API برای قیمت طلا با PHP، یک راه حل قدرتمند برای ارائه اطلاعات قیمت طلا به صورت خودکار و برنامهریزیشده است. با پیادهسازی این API و بهبود آن با ویژگیهای اضافی، میتوانید یک سرویس ارزشمند برای کسبوکارها و توسعهدهندگان دیگر ایجاد کنید.
