国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
Bagaimana menangani kesilapan dalam API REST?
Bagaimana untuk menguji API REST saya?
Bagaimana untuk merakam API REST saya?
bagaimana merancang API yang tenang?
bagaimana untuk menuding hasil dalam API REST saya?
Bagaimana untuk mengehadkan kadar API REST saya?
bagaimana menggunakan API REST saya?
Rumah pembangunan bahagian belakang tutorial php Bina API rehat dari awal: Pengenalan

Bina API rehat dari awal: Pengenalan

Feb 20, 2025 am 11:48 AM

Build a REST API from Scratch: An Introduction

Ekosistem Internet semasa telah diubah sepenuhnya oleh API, dan ada alasan yang baik. Dengan menggunakan API pihak ketiga dalam produk atau perkhidmatan anda, anda boleh mengakses pelbagai ciri berguna-seperti perkhidmatan pengesahan atau penyimpanan-yang memberi manfaat kepada anda dan pengguna anda. Dengan mendedahkan API anda sendiri, permohonan anda akan menjadi "sebahagian daripada komposisi" dan menggunakannya dengan cara yang anda tidak pernah berfikir ... Sudah tentu, jika anda melakukan ini dengan cara yang betul. Dalam siri dua bahagian ini, saya akan menunjukkan kepada anda bagaimana untuk membuat lapisan API yang tenang untuk aplikasi PHP anda menggunakan satu set amalan terbaik sebenar. Kod sumber lengkap untuk projek ini akan disediakan pada akhir Bahagian 2.

mata utama

    REST API adalah penting untuk perkhidmatan web moden dan menyediakan pemaju dengan antara muka mesra pengguna untuk mengakses dan memanipulasi data aplikasi.
  • Dokumen adalah penting;
  • Kerangka Slim, digabungkan dengan alat seperti Idiorm dan Monolog, boleh memanfaatkan keupayaan integrasi penghalaan dan middleware yang kuat untuk memudahkan pembangunan API yang cekap.
  • Melaksanakan HTTPS memastikan komunikasi yang selamat dan menghalang akses yang tidak dibenarkan kepada data yang dihantar antara pelanggan dan pelayan.
  • Pengendalian ralat berstruktur dalam format JSON meningkatkan ketersediaan API, menyediakan mesej ralat dan kod yang jelas yang memudahkan debugging dan integrasi.
  • Pengesahan melalui middleware seperti token atas pengesahan asas dan pemprosesan JSON adalah penting untuk melindungi dan mengurus interaksi API dengan berkesan.

REST: UI yang mesra pemaju

Pertama sekali, API adalah antara muka pengguna pemaju, jadi ia harus mesra, mudah, mudah digunakan, dan tentu saja menyenangkan; Walaupun ia hanya fail ReadMe yang mudah tetapi ditulis dengan baik, dokumentasi adalah permulaan yang baik. Maklumat yang paling sedikit yang kami perlukan adalah ringkasan skop perkhidmatan dan senarai kaedah dan titik akses. Ringkasan yang baik boleh: & gt; Ia mempunyai dua jenis objek, kenalan dan nota. Setiap kenalan mempunyai atribut asas seperti nama pertama, nama belakang, dan alamat e -mel. Di samping itu, setiap kenalan boleh mempunyai beberapa nota dalam format markdown yang berkaitan dengannya.

Kemudian, lebih baik menyenaraikan semua sumber dan operasi yang akan kami laksanakan. Ini boleh dianggap sebagai setara dengan menggambarkan wireframe aplikasi. Berikutan prinsip utama rehat, setiap sumber diwakili oleh URL di mana operasi adalah kaedah HTTP yang digunakan untuk mengaksesnya. Sebagai contoh, GET/API/Kenalan/12 akan mengambil kenalan dengan ID 12, manakala PUT/API/Kenalan/12 akan mengemas kini kenalan yang sama. Senarai kaedah lengkap adalah seperti berikut:

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個新聯(lián)系人并返回它(添加了 id 屬性)
/api/contacts/:id PUT          更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id PATCH        部分更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id DELETE       刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/star PUT    將 ID 為 :id 的聯(lián)系人添加到收藏夾
/api/contacts/:id/star DELETE 從收藏夾中刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/notes GET   返回 ID 為 :id 的聯(lián)系人的筆記
/api/contacts/:id/notes/:nid GET   返回 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes POST  為 ID 為 :id 的聯(lián)系人添加新筆記
/api/contacts/:id/notes/:nid PUT   更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid PATCH  部分更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid DELETE 刪除 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記</code>

Untuk dokumentasi yang lebih lengkap dan profesional, anda boleh mempertimbangkan menggunakan alat seperti Swagger, Apidoc, atau Google API Discovery Service: Pengguna anda akan menyukai anda!

Alat dan Tetapan

Alat utama yang akan saya gunakan untuk membina API adalah kerangka tipis. Kenapa? & gt; [Ia] membantu anda menulis aplikasi web yang mudah dan kuat dan API dengan cepat.

Ini benar. Keupayaan penghalaannya yang kuat menjadikannya mudah untuk menggunakan kaedah selain daripada mendapatkan dan pos, ia memberikan sokongan terbina dalam untuk mengatasi kaedah HTTP (melalui tajuk HTTP dan medan pos tersembunyi) dan boleh disambungkan dengan middleware dan ciri tambahan untuk membolehkan program aplikasi dan API Pembangunan sangat mudah. Bersama -sama dengan Slim, saya menggunakan Idiorm untuk mengakses lapisan pangkalan data dan pembalakan menggunakan monolog. Oleh itu, fail komposer.json kami akan kelihatan seperti ini:

{
  "name": "yourname/my-contacts",
  "description": "Simple RESTful API for contacts management",
  "license": "MIT",
  "authors": [
    {
      "name": "Your Name",
      "email": "you@yourdomain.com"
    }
  ],
  "require": {
    "slim/slim": "*",
    "slim/extras": "*",
    "slim/middleware": "*",
    "monolog/monolog": "*",
    "j4mie/paris": "*",
    "flynsarmy/slim-monolog": "*"
  },
  "archive": {
    "exclude": ["vendor", ".DS_Store", "*.log"]
  },
  "autoload": {
    "psr-0": {
      "API": "lib/"
    }
  }
}
Pakej Slim/Extras dan Slim/Middleware memberikan ciri -ciri berguna seperti resolusi jenis kandungan dan pengesahan asas. Kelas adat kami terletak di bawah ruang nama API dan di direktori Lib. Pada ketika ini, struktur direktori kerja kami adalah seperti berikut:

<code>bootstrap.php
composer.json
README.md
bin/
    import
    install
lib/
    API/
public/
    .htaccess
    index.php
share/
    config/
        default.php
    db/
    logs/
    sql/
        data/
            contacts.sql
            users.sql
        tables/
            contacts.sql
            notes.sql
            users.sql
        ssl/
            mysitename.crt
            mysitename.key</code>
Pengawal depan aplikasi kami adalah awam/index.php, dan semua trafik bukan fail atau direktori diarahkan di sini melalui peraturan penulisan semula URL standard. Kemudian saya meletakkan semua kod inisialisasi dalam bootstrap.php dan kita akan lihat kemudian. Direktori saham mengandungi data seperti log, fail konfigurasi, pangkalan data SQLite dan fail dump, dan sijil SSL. Direktori bin mengandungi skrip utiliti yang menggunakan fail .sql yang disediakan untuk membuat pangkalan data dan mengimport beberapa data.

SSL ada di mana -mana

API kami hanya boleh diakses dalam mod HTTPS dan tidak memerlukan pengalihan semula. Ini memudahkan logik pengesahan dan menghalang pelanggan yang dikonfigurasikan secara tidak wajar daripada mengakses titik akhir yang tidak disulitkan. Cara paling mudah dan paling logik untuk menubuhkan kaedah ini adalah untuk bertindak secara langsung di pelayan web atau melalui pelayan proksi. Saya menggunakan Apache yang boleh dipercayai lama untuk melakukan ini, dan fail hos maya saya kelihatan seperti ini:

<Directory>

  # Required for mod_rewrite in .htaccess
  AllowOverride FileInfo

  Options All -Indexes

  DirectoryIndex index.php index.shtml index.html

  <IfModule php5_module="">
    # For Development only!
    php_flag display_errors On
  </IfModule>

  # Enable gzip compression
  <IfModule filter_module="">
    AddOutputFilterByType DEFLATE application/json
  </IfModule>

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Directory>

<VirtualHost *:80>
  ServerAdmin you@yourdomain.com
  DocumentRoot "/path/to/MyApp/public"
  ServerName myapp.dev

  <IfModule rewrite_module="">
    RewriteEngine on

    ## Throw a 403 (forbidden) status for non secure requests
    RewriteCond %{HTTPS} off
    RewriteRule ^.*$ - [L,R=403]
  </IfModule>
</VirtualHost>

<IfModule ssl_module="">

  NameVirtualHost *:443

  Listen 443
  SSLRandomSeed startup builtin
  SSLRandomSeed connect builtin

  <VirtualHost *:443>
    ServerAdmin you@yourdomain.com
    DocumentRoot "/path/to/MyApp/public"
    ServerName myapp.dev

    SSLEngine on
    SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt
    SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key

    SetEnv SLIM_MODE development

  </VirtualHost>
</IfModule>
Mula -mula menentukan tetapan direktori supaya mereka biasa dengan versi HTTP dan HTTPS laman web kami. Dalam konfigurasi tuan rumah yang tidak selamat, saya menggunakan mod_rewrite untuk mengeluarkan kesilapan melarang 403 untuk sebarang sambungan yang tidak selamat, dan kemudian di bahagian keselamatan, saya menubuhkan SSL dengan sijil ditandatangani sendiri, serta pembolehubah slim_env yang memberitahu Langsing mod permohonan semasa. Untuk maklumat lanjut mengenai cara membuat sijil yang ditandatangani sendiri di Apache dan pasangkannya, lihat artikel ini di SSLShopper. Sekarang kita mempunyai matlamat yang jelas, struktur direktori asas, dan tetapan pelayan, mari kita jalankan komposer.phar memasang dan mula menulis beberapa kod.

program boot dan pengawal depan

Seperti yang dinyatakan sebelum ini, fail bootstrap.php bertanggungjawab untuk memuatkan tetapan aplikasi dan tetapan autoloader kami.

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個新聯(lián)系人并返回它(添加了 id 屬性)
/api/contacts/:id PUT          更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id PATCH        部分更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id DELETE       刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/star PUT    將 ID 為 :id 的聯(lián)系人添加到收藏夾
/api/contacts/:id/star DELETE 從收藏夾中刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/notes GET   返回 ID 為 :id 的聯(lián)系人的筆記
/api/contacts/:id/notes/:nid GET   返回 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes POST  為 ID 為 :id 的聯(lián)系人添加新筆記
/api/contacts/:id/notes/:nid PUT   更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid PATCH  部分更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid DELETE 刪除 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記</code>

Pertama, saya mendapat persekitaran semasa. Jika fail yang dinamakan .php wujud, ia dimuatkan, jika tidak, fail konfigurasi lalai dimuatkan. Tetapan khusus Slim disimpan dalam array $ config ['app'] dan diserahkan kepada pembina aplikasi yang memanjangkan objek Slim Asas (pilihan tetapi disyorkan). Contohnya, pernyataan:

{
  "name": "yourname/my-contacts",
  "description": "Simple RESTful API for contacts management",
  "license": "MIT",
  "authors": [
    {
      "name": "Your Name",
      "email": "you@yourdomain.com"
    }
  ],
  "require": {
    "slim/slim": "*",
    "slim/extras": "*",
    "slim/middleware": "*",
    "monolog/monolog": "*",
    "j4mie/paris": "*",
    "flynsarmy/slim-monolog": "*"
  },
  "archive": {
    "exclude": ["vendor", ".DS_Store", "*.log"]
  },
  "autoload": {
    "psr-0": {
      "API": "lib/"
    }
  }
}
Konfigurasi logger monolog yang menulis ke fail aplikasi/path/share/log/envName_yyy-mm-dd.log. Kemudian, selepas beberapa penambahbaikan (anda dapat melihatnya dalam kod sumber), saya mendapat penulis log yang dihasilkan dan cuba menyambung ke pangkalan data:

<code>bootstrap.php
composer.json
README.md
bin/
    import
    install
lib/
    API/
public/
    .htaccess
    index.php
share/
    config/
        default.php
    db/
    logs/
    sql/
        data/
            contacts.sql
            users.sql
        tables/
            contacts.sql
            notes.sql
            users.sql
        ssl/
            mysitename.crt
            mysitename.key</code>
Akhirnya, saya menambah middleware yang diperlukan untuk contoh aplikasi saya. Middleware Slim adalah seperti lapisan bawang, middleware pertama yang anda tambah akan menjadi lapisan paling dalam, jadi urutan middleware kami adalah penting. Saya menggunakan middleware berikut dalam API kami: - Cache (Tahap Dalam); badan "middleware utiliti amalan terbaik; - pengesahan (lapisan paling luar). Kami akan menulis semua ini, kecuali kandungan kandungan yang sedia ada. Pada akhir fail bootstrap, saya menentukan dua pembolehubah global $ App (AP) dan $ log (penulis log). Fail ini dimuatkan oleh index.php pengawal hadapan kami, dan sesuatu sihir berlaku dalam fail itu.

Struktur penghalaan

Slim mempunyai ciri yang bagus yang dipanggil kumpulan laluan. Menggunakan ciri ini, kami boleh menentukan laluan aplikasi kami seperti ini:

<Directory>

  # Required for mod_rewrite in .htaccess
  AllowOverride FileInfo

  Options All -Indexes

  DirectoryIndex index.php index.shtml index.html

  <IfModule php5_module="">
    # For Development only!
    php_flag display_errors On
  </IfModule>

  # Enable gzip compression
  <IfModule filter_module="">
    AddOutputFilterByType DEFLATE application/json
  </IfModule>

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Directory>

<VirtualHost *:80>
  ServerAdmin you@yourdomain.com
  DocumentRoot "/path/to/MyApp/public"
  ServerName myapp.dev

  <IfModule rewrite_module="">
    RewriteEngine on

    ## Throw a 403 (forbidden) status for non secure requests
    RewriteCond %{HTTPS} off
    RewriteRule ^.*$ - [L,R=403]
  </IfModule>
</VirtualHost>

<IfModule ssl_module="">

  NameVirtualHost *:443

  Listen 443
  SSLRandomSeed startup builtin
  SSLRandomSeed connect builtin

  <VirtualHost *:443>
    ServerAdmin you@yourdomain.com
    DocumentRoot "/path/to/MyApp/public"
    ServerName myapp.dev

    SSLEngine on
    SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt
    SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key

    SetEnv SLIM_MODE development

  </VirtualHost>
</IfModule>
Saya mencipta dua kumpulan bersarang /API dan /V1 supaya kita dapat dengan mudah mematuhi amalan terbaik "Versi dalam URL". Saya juga membuat beberapa laluan pilihan untuk/API/yang mungkin mengandungi kandungan yang boleh dibaca pengguna, serta URL URL (/) akar biasa yang di dunia nyata mungkin mengandungi antara muka pengguna awam aplikasi.

middleware JSON

Pendekatan awal saya adalah menggunakan middleware routing (middleware tipis lain) dalam kumpulan /V1 untuk pengesahan dan permintaan JSON, tetapi saya mendapati ia lebih praktikal dan ringkas untuk menggunakan middleware klasik. Seperti yang dinyatakan sebelum ini, middleware adalah contoh kelas yang diwarisi dari SlimMiddleWare. Kaedah panggilan () middleware yang tipis adalah di mana operasi berlaku.

// Init application mode
if (empty($_ENV['SLIM_MODE'])) {
  $_ENV['SLIM_MODE'] = (getenv('SLIM_MODE'))
    ? getenv('SLIM_MODE') : 'development';
}

// Init and load configuration
$config = array();

$configFile = dirname(__FILE__) . '/share/config/'
  . $_ENV['SLIM_MODE'] . '.php';

if (is_readable($configFile)) {
  require_once $configFile;
} else {
  require_once dirname(__FILE__) . '/share/config/default.php';
}

// Create Application
$app = new API\Application($config['app']);
Middleware JSON kami melaksanakan dua amalan terbaik: "JSON Response Only" dan "Body Pengekodan JSON". Kaedahnya adalah seperti berikut:

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個新聯(lián)系人并返回它(添加了 id 屬性)
/api/contacts/:id PUT          更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id PATCH        部分更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id DELETE       刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/star PUT    將 ID 為 :id 的聯(lián)系人添加到收藏夾
/api/contacts/:id/star DELETE 從收藏夾中刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/notes GET   返回 ID 為 :id 的聯(lián)系人的筆記
/api/contacts/:id/notes/:nid GET   返回 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes POST  為 ID 為 :id 的聯(lián)系人添加新筆記
/api/contacts/:id/notes/:nid PUT   更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid PATCH  部分更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid DELETE 刪除 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記</code>

kita boleh lulus laluan akar ke pembina middleware. Dalam kes ini, saya lulus /API /V1 supaya middleware kami hanya digunakan untuk bahagian API laman web kami. Jika laluan semasa sepadan dengan tajuk Jenis Kandungan Respons, tajuk Jenis Kandungan Respons terpaksa menjadi Aplikasi/JSON, dan saya periksa kaedah permintaan. Jika kaedah permintaan adalah salah satu kaedah permintaan yang membolehkan menulis (meletakkan, menyiarkan, patch), pengepala jenis kandungan permintaan mestilah permohonan/JSON, jika tidak, permohonan itu akan keluar dan memaparkan kod status HTTP jenis 415 yang tidak disokong. Jika semuanya berfungsi dengan baik, pernyataan $ this- & gt; next- & gt; call () akan menjalankan middleware seterusnya dalam rantai.

Pengesahan

Oleh kerana permohonan kami akan dijalankan pada HTTPS secara lalai, saya memutuskan untuk menggunakan kaedah di mana token mengambil keutamaan atas pengesahan asas: kekunci API dihantar ke medan nama pengguna header auth http asas (tiada kata laluan diperlukan)). Untuk melakukan ini, saya menulis kelas middleware yang tipis yang dipanggil Tokenoverbasicauth dengan mengubah suai httpbasicah yang sedia ada. Middleware ini berjalan pertama di dalam rantai, jadi ia ditambah sebagai yang terakhir, dan ia memerlukan parameter laluan akar pilihan dalam pembina.

{
  "name": "yourname/my-contacts",
  "description": "Simple RESTful API for contacts management",
  "license": "MIT",
  "authors": [
    {
      "name": "Your Name",
      "email": "you@yourdomain.com"
    }
  ],
  "require": {
    "slim/slim": "*",
    "slim/extras": "*",
    "slim/middleware": "*",
    "monolog/monolog": "*",
    "j4mie/paris": "*",
    "flynsarmy/slim-monolog": "*"
  },
  "archive": {
    "exclude": ["vendor", ".DS_Store", "*.log"]
  },
  "autoload": {
    "psr-0": {
      "API": "lib/"
    }
  }
}

Kaedah ini mencari Header Permintaan PHP_AUTH_USER untuk Token Auth, dan jika ia tidak wujud atau tidak sah, lulus 401 status dilarang dan tajuk pengesahan kepada pelanggan. Kaedah Verifikasi () dilindungi dan oleh itu boleh ditindih oleh subclass;

<code>bootstrap.php
composer.json
README.md
bin/
    import
    install
lib/
    API/
public/
    .htaccess
    index.php
share/
    config/
        default.php
    db/
    logs/
    sql/
        data/
            contacts.sql
            users.sql
        tables/
            contacts.sql
            notes.sql
            users.sql
        ssl/
            mysitename.crt
            mysitename.key</code>
di sini, saya hanya menyemak kewujudan kunci API dalam jadual pengguna dan jika saya dapati pengguna yang sah, ia ditambah kepada konteks aplikasi untuk digunakan dengan lapisan seterusnya (Ratelimit). Anda boleh mengubah suai atau melanjutkan kelas ini untuk menyuntik logik pengesahan anda sendiri atau menggunakan modul OAuth. Untuk maklumat lanjut mengenai OAuth, lihat artikel Jamie Munro.

muatan ralat yang digunakan

API kami harus memaparkan mesej ralat yang berguna dalam format yang boleh digunakan, sebaik -baiknya dalam perwakilan JSON, jika boleh. Kami memerlukan muatan minimum yang mengandungi kod ralat dan mesej. Di samping itu, kesilapan pengesahan memerlukan lebih banyak segmentasi. Menggunakan Slim, kita boleh mentakrifkan semula 404 kesilapan dan kesilapan pelayan menggunakan kaedah $ App- & gt; notFound () dan $ App- & gt; (), masing-masing.

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個新聯(lián)系人并返回它(添加了 id 屬性)
/api/contacts/:id PUT          更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id PATCH        部分更新 ID 為 :id 的聯(lián)系人
/api/contacts/:id DELETE       刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/star PUT    將 ID 為 :id 的聯(lián)系人添加到收藏夾
/api/contacts/:id/star DELETE 從收藏夾中刪除 ID 為 :id 的聯(lián)系人

/api/contacts/:id/notes GET   返回 ID 為 :id 的聯(lián)系人的筆記
/api/contacts/:id/notes/:nid GET   返回 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes POST  為 ID 為 :id 的聯(lián)系人添加新筆記
/api/contacts/:id/notes/:nid PUT   更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid PATCH  部分更新 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記
/api/contacts/:id/notes/:nid DELETE 刪除 ID 為 :id 的聯(lián)系人的 ID 為 :nid 的筆記</code>

Ralat tidak dijumpai lebih mudah: Pertama saya mendapatkan jenis media yang diminta, dan kemudian bendera $ ISAPI memberitahu saya jika URL semasa berada di bawah kumpulan /API /V*. Jika pelanggan meminta URL API atau menghantar tajuk Jenis Kandungan JSON, saya akan mengembalikan output JSON, jika tidak, saya boleh membuat templat atau hanya mencetak beberapa HTML statik seperti yang ditunjukkan dalam contoh ini. Kesalahan lain agak rumit, dan kaedah $ App- & gt; () dicetuskan apabila pengecualian berlaku, dan Slim menukarkan ralat PHP standard ke objek ERRORException. Kami memerlukan satu cara untuk memberikan kesilapan yang berguna kepada pelanggan tanpa mendedahkan terlalu banyak mekanisme dalaman untuk mengelakkan kelemahan keselamatan. Untuk aplikasi ini, saya mencipta dua pengecualian adat, apiexception dan apiexceptionvalidationexception, yang terdedah kepada orang ramai, semua jenis pengecualian lain dilog masuk dalam log dan hanya dipaparkan dalam mod pembangunan.

{
  "name": "yourname/my-contacts",
  "description": "Simple RESTful API for contacts management",
  "license": "MIT",
  "authors": [
    {
      "name": "Your Name",
      "email": "you@yourdomain.com"
    }
  ],
  "require": {
    "slim/slim": "*",
    "slim/extras": "*",
    "slim/middleware": "*",
    "monolog/monolog": "*",
    "j4mie/paris": "*",
    "flynsarmy/slim-monolog": "*"
  },
  "archive": {
    "exclude": ["vendor", ".DS_Store", "*.log"]
  },
  "autoload": {
    "psr-0": {
      "API": "lib/"
    }
  }
}
Kaedah

$ app- & gt; () menerima pengecualian yang dibuang sebagai parameter. Secara lalai saya mendapat semua data yang saya perlukan dan mengisi array ralat $, dan kemudian jika saya berada dalam mod pengeluaran, saya tidak dapat menyempurnakan data peribadi dan menulis semula mesej dengan data umum. Kelas ValidationException tersuai mempunyai kaedah getData () tersuai yang mengembalikan pelbagai ralat pengesahan yang ditambah kepada muatan akhir. Kemudian, paparkan ralat dalam JSON atau HTML berdasarkan permintaan. Di sisi API, kita boleh mempunyai ralat mudah seperti berikut:

<code>bootstrap.php
composer.json
README.md
bin/
    import
    install
lib/
    API/
public/
    .htaccess
    index.php
share/
    config/
        default.php
    db/
    logs/
    sql/
        data/
            contacts.sql
            users.sql
        tables/
            contacts.sql
            notes.sql
            users.sql
        ssl/
            mysitename.crt
            mysitename.key</code>

atau ralat pengesahan lengkap seperti yang ditunjukkan di bawah:

<Directory>

  # Required for mod_rewrite in .htaccess
  AllowOverride FileInfo

  Options All -Indexes

  DirectoryIndex index.php index.shtml index.html

  <IfModule php5_module="">
    # For Development only!
    php_flag display_errors On
  </IfModule>

  # Enable gzip compression
  <IfModule filter_module="">
    AddOutputFilterByType DEFLATE application/json
  </IfModule>

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Directory>

<VirtualHost *:80>
  ServerAdmin you@yourdomain.com
  DocumentRoot "/path/to/MyApp/public"
  ServerName myapp.dev

  <IfModule rewrite_module="">
    RewriteEngine on

    ## Throw a 403 (forbidden) status for non secure requests
    RewriteCond %{HTTPS} off
    RewriteRule ^.*$ - [L,R=403]
  </IfModule>
</VirtualHost>

<IfModule ssl_module="">

  NameVirtualHost *:443

  Listen 443
  SSLRandomSeed startup builtin
  SSLRandomSeed connect builtin

  <VirtualHost *:443>
    ServerAdmin you@yourdomain.com
    DocumentRoot "/path/to/MyApp/public"
    ServerName myapp.dev

    SSLEngine on
    SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt
    SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key

    SetEnv SLIM_MODE development

  </VirtualHost>
</IfModule>

Kesimpulan

Kami kini mempunyai teras API. Dalam bahagian seterusnya, kami akan menambah beberapa kandungan untuk mempunyai perkhidmatan berfungsi sepenuhnya. Pada masa ini, jangan ragu untuk membaca artikel yang dikaitkan dalam bahagian ini - mereka adalah harta karun prinsip reka bentuk API yang berguna.

Soalan Lazim (FAQ) di bangunan API Rehat dari awal

Apakah komponen utama API REST?

REST API terdiri daripada beberapa komponen utama. Pertama ialah kaedah HTTP, yang mentakrifkan jenis operasi yang akan dilakukan. Ini termasuk mendapatkan, pos, meletakkan, memadam, dll. Komponen kedua adalah URL atau URI, yang merupakan pengenal sumber. Komponen ketiga adalah header HTTP, yang membawa metadata permintaan dan respons HTTP. Komponen keempat adalah badan atau muatan, yang membawa data sebenar dihantar. Akhirnya, kod status menunjukkan kejayaan atau kegagalan permintaan HTTP.

bagaimana melindungi API REST saya?

Melindungi API REST anda adalah penting untuk melindungi data sensitif. Anda boleh menggunakan pelbagai kaedah seperti kekunci API, OAuth, atau JWT untuk pengesahan dan kebenaran. Di samping itu, pemindahan data sentiasa digunakan untuk memastikan integriti data dan kerahsiaan. Secara kerap mengemas kini dan tampalkan API anda dan kebergantungannya untuk melindungi daripada kelemahan.

bagaimana versi API REST saya?

Versi API REST anda membolehkan anda memperkenalkan perubahan yang tidak merosakkan tanpa menjejaskan pelanggan sedia ada. Anda boleh versi API dengan memasukkan nombor versi dalam URL atau menggunakan tajuk permintaan tersuai. Ingatlah untuk log semua perubahan dan beritahu pengguna API anda tentang versi baru dan ciri -ciri mereka.

Bagaimana menangani kesilapan dalam API REST?

Pengendalian ralat yang betul dalam API REST meningkatkan kebolehgunaan dan kebolehpercayaannya. Gunakan kod status HTTP untuk menunjukkan jenis ralat. Sertakan mesej ralat dalam badan tindak balas untuk maklumat lanjut mengenai ralat. Ini membantu pelanggan memahami apa yang salah dan bagaimana menyelesaikan masalah.

Bagaimana untuk menguji API REST saya?

Uji API REST anda untuk memastikan ia berfungsi seperti yang diharapkan dan boleh mengendalikan pelbagai senario. Anda boleh menggunakan alat seperti Postman atau Curl untuk ujian manual. Untuk ujian automatik, pertimbangkan untuk menggunakan ujian unit, ujian integrasi, dan ujian akhir-ke-akhir. Gunakan pelayan mock untuk mensimulasikan tindak balas API dan menguji bagaimana API anda mengendalikan pelbagai jenis respons.

Bagaimana untuk merakam API REST saya?

Dokumentasi yang baik menjadikan API REST anda mudah difahami dan digunakan. Termasuk maklumat terperinci mengenai titik akhir, kaedah permintaan, parameter permintaan, contoh permintaan, kod status tindak balas, dan contoh tindak balas. Anda boleh menggunakan alat seperti Swagger atau Postman untuk menjana dan menjadi tuan rumah dokumen API anda.

bagaimana merancang API yang tenang?

Reka bentuk API Restful melibatkan sumber perancangan, titik akhir, dan kaedah. Gunakan kata nama untuk sumber dan kaedah HTTP untuk operasi. Pastikan API mudah dan intuitif. Gunakan kod status untuk menunjukkan hasil permintaan. Buat API anda tanpa statistik, yang bermaksud bahawa setiap permintaan harus mengandungi semua maklumat yang anda perlukan untuk memproses permintaan tersebut.

bagaimana untuk menuding hasil dalam API REST saya?

paging membantu mengehadkan jumlah data yang dikembalikan dalam satu tindak balas. Anda boleh melaksanakan paging menggunakan parameter pertanyaan seperti "halaman" dan "had". Sertakan metadata dalam tajuk atau badan tindak balas untuk menunjukkan halaman semasa, jumlah halaman, jumlah item, dll.

Bagaimana untuk mengehadkan kadar API REST saya?

Kadar had melindungi API REST anda dari penyalahgunaan dan memastikan penggunaan yang adil. Anda boleh mengehadkan bilangan permintaan berdasarkan alamat IP, kunci API, atau akaun pengguna anda. Gunakan tajuk HTTP untuk menyampaikan status pembatas kadar kepada pelanggan.

bagaimana menggunakan API REST saya?

Anda boleh menggunakan API REST anda ke pelayan atau platform awan. Apabila memilih pilihan penempatan, pertimbangkan faktor seperti kos, skalabiliti, dan keselamatan. Gunakan alat integrasi berterusan dan penghantaran berterusan (CI/CD) untuk mengautomasikan proses penempatan. Pantau prestasi dan penggunaan API anda untuk memastikan ia memenuhi keperluan pengguna anda.

Atas ialah kandungan terperinci Bina API rehat dari awal: Pengenalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana saya melaksanakan pengesahan dan kebenaran dalam php? Bagaimana saya melaksanakan pengesahan dan kebenaran dalam php? Jun 20, 2025 am 01:03 AM

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Bagaimana anda boleh mengendalikan fail memuat naik dengan selamat di php? Bagaimana anda boleh mengendalikan fail memuat naik dengan selamat di php? Jun 19, 2025 am 01:05 AM

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Apakah perbezaan antara == (perbandingan longgar) dan === (perbandingan ketat) dalam php? Apakah perbezaan antara == (perbandingan longgar) dan === (perbandingan ketat) dalam php? Jun 19, 2025 am 01:07 AM

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Bagaimanakah saya melakukan operasi aritmetik dalam php (, -, *, /, %)? Bagaimanakah saya melakukan operasi aritmetik dalam php (, -, *, /, %)? Jun 19, 2025 pm 05:13 PM

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.

Bagaimanakah anda boleh berinteraksi dengan pangkalan data NoSQL (mis., MongoDB, Redis) dari PHP? Bagaimanakah anda boleh berinteraksi dengan pangkalan data NoSQL (mis., MongoDB, Redis) dari PHP? Jun 19, 2025 am 01:07 AM

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Bagaimanakah saya tetap terkini dengan perkembangan php terkini dan amalan terbaik? Bagaimanakah saya tetap terkini dengan perkembangan php terkini dan amalan terbaik? Jun 23, 2025 am 12:56 AM

Tostaycurrentwithphpdevelopmentsandbestpractices, followeyNewsssourcesLikePhp.netandphpweekly, engageWithCommunitiesonforumsandconference, keeptoolingupdatedandgraduallyAdoptNewFeatures, dan readribcoursourcourceSource

Apakah php, dan mengapa ia digunakan untuk pembangunan web? Apakah php, dan mengapa ia digunakan untuk pembangunan web? Jun 23, 2025 am 12:55 AM

Phpbecamepopularforwebdevelopmentduetoitseaseoflearning, seamlessintegrationwithhtml, widespreadhostingsupport, andalargeecosystemincludingframeworkslikelaravelandcmsplatformsLikeWordPress.itexcelsinhandessubmissions

Bagaimana cara menetapkan zon waktu php? Bagaimana cara menetapkan zon waktu php? Jun 25, 2025 am 01:00 AM

TosetTheRightTimeZoneinPhp, USEDATE_DEFAULT_TIMEZONE_SET () functionAtthestArtAfyourscriptwithavalididentifiersuchas'america/new_york'.1.usedate_default_timeSet ()

See all articles