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
{ "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
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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

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.

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.

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.

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.

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

Phpbecamepopularforwebdevelopmentduetoitseaseoflearning, seamlessintegrationwithhtml, widespreadhostingsupport, andalargeecosystemincludingframeworkslikelaravelandcmsplatformsLikeWordPress.itexcelsinhandessubmissions

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