MASAR DevelopersPARTNER API v1
MASAR DEVELOPER PLATFORM

تطبيقات الويب والخوادم

أمثلة Server-to-Server للغات الويب الشائعة، مع نمط آمن للمتصفح يحمي مفتاح التكامل.

v1.0Read-onlyHTTPSJSON

قاعدة معمارية مهمة

لا ترسل مفتاح MASAR إلى المتصفح. تطبيق الويب في المتصفح يتصل بخادم مؤسستك، وخادمك وحده يتصل بـMASAR.
Browser / SPA
    ↓ HTTPS
Your trusted server
    ↓ Authorization: Bearer mapi_...
MASAR Partner API

JavaScript — Node.js

const baseUrl = "https://api.masardz.com/api/v1/partner";
const apiKey = process.env.MASAR_API_KEY;

const response = await fetch(`${baseUrl}/buses?page=1&per_page=25`, {
  headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json" }
});
if (!response.ok) throw new Error(`MASAR HTTP ${response.status}`);
const body = await response.json();
console.log(body.data.items);

TypeScript — Node.js

const baseUrl: string = "https://api.masardz.com/api/v1/partner";
const apiKey: string | undefined = process.env.MASAR_API_KEY;

const response: Response = await fetch(`${baseUrl}/buses?page=1&per_page=25`, {
  headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json" }
});
if (!response.ok) throw new Error(`MASAR HTTP ${response.status}`);
const body: any = await response.json();
console.log(body.data.items);

PHP

<?php
$apiKey = getenv('MASAR_API_KEY');
$url = 'https://api.masardz.com/api/v1/partner/buses?page=1&per_page=25';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Accept: application/json',
    ],
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) throw new RuntimeException("MASAR HTTP $status");
$data = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
print_r($data['data']['items']);

Python

import os, requests

url = "https://api.masardz.com/api/v1/partner/buses"
headers = {"Authorization": f"Bearer {os.environ['MASAR_API_KEY']}"}
r = requests.get(url, headers=headers, params={"page": 1, "per_page": 25}, timeout=15)
r.raise_for_status()
for bus in r.json()["data"]["items"]:
    print(bus["id"], bus.get("plate_number"))

Go

package main

import (
  "fmt"
  "io"
  "net/http"
  "os"
)

func main() {
  req, _ := http.NewRequest("GET", "https://api.masardz.com/api/v1/partner/buses?page=1&per_page=25", nil)
  req.Header.Set("Authorization", "Bearer "+os.Getenv("MASAR_API_KEY"))
  req.Header.Set("Accept", "application/json")
  resp, err := http.DefaultClient.Do(req)
  if err != nil { panic(err) }
  defer resp.Body.Close()
  body, _ := io.ReadAll(resp.Body)
  if resp.StatusCode != 200 { panic(fmt.Sprintf("MASAR HTTP %d: %s", resp.StatusCode, body)) }
  fmt.Println(string(body))
}

Ruby

require 'net/http'
require 'json'

uri = URI('https://api.masardz.com/api/v1/partner/buses?page=1&per_page=25')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "Bearer #{ENV.fetch('MASAR_API_KEY')}"
req['Accept'] = 'application/json'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
raise "MASAR HTTP #{res.code}" unless res.code.to_i == 200
puts JSON.parse(res.body).dig('data', 'items')

Frontend JavaScript

من المتصفح استدعِ API الخاصة بخادم مؤسستك فقط:

const response = await fetch('/api/fleet/buses');
if (!response.ok) throw new Error('تعذر تحميل الحافلات');
const buses = await response.json();