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

目次
私の最初のアプローチは、認(rèn)証とJSONリクエスト /応答のために /V1グループ內(nèi)でルーティングミドルウェア(別のスリムミドルウェア)を使用することでしたが、クラシックミドルウェアを使用するためにより実用的で簡(jiǎn)潔であることがわかりました。前述のように、ミドルウェアは、Slimmiddlewareから継承されたクラスのインスタンスです。スリムミドルウェアのcall()メソッドは、操作がグローバルミドルウェアとしてリンクされている場(chǎng)合、$ app-> add()メソッドを使用して自動(dòng)的に実行されます。
REST APIのエラーを処理する方法は?
REST APIをテストするにはどうすればよいですか?
私のREST APIを記録する方法は?
RESTFUL APIを設(shè)計(jì)する方法は?
私のREST APIで結(jié)果をページングする方法は?
私のREST APIのレートを制限する方法は?
私のREST APIを展開する方法は?
ホームページ バックエンド開発 PHPチュートリアル ゼロからREST APIを構(gòu)築する:はじめに

ゼロからREST APIを構(gòu)築する:はじめに

Feb 20, 2025 am 11:48 AM

Build a REST API from Scratch: An Introduction

現(xiàn)在のインターネットエコシステムはAPIによって完全に変更されており、正當(dāng)な理由があります。製品またはサービスでサードパーティAPIを使用することにより、認(rèn)証やストレージサービスなど、幅広い有用な機(jī)能にアクセスできます。これは、あなたとユーザーにとって有益です。獨(dú)自のAPIを公開することにより、アプリケーションは「構(gòu)成の一部」になり、これを考えたことのない方法で使用します...もちろん、これを正しい方法で行うと。この2部構(gòu)成のシリーズでは、一連の実際のベストプラクティスを使用して、PHPアプリケーション用のRESTFUL APIレイヤーを作成する方法を紹介します。このプロジェクトの完全なソースコードは、パート2の終わりに提供されます。

キーポイント

  • REST APIは最新のWebサービスにとって重要であり、アプリケーションデータにアクセスして操作するためのユーザーフレンドリーなインターフェイスを開発者に提供します。
  • ドキュメントは重要です。
  • イディオームやモノログなどのツールと組み合わせた
  • スリムフレームワークは、強(qiáng)力なルーティングとミドルウェア統(tǒng)合機(jī)能を活用して、効率的なAPI開発を促進(jìn)することができます。
  • HTTPSの実裝は、安全な通信を保証し、クライアントとサーバー間で送信されるデータへの不正アクセスを防ぎます。
  • JSON形式での構(gòu)造化エラー処理により、APIの可用性が向上し、デバッグと統(tǒng)合を容易にする明確なエラーメッセージとコードを提供します。
  • API相互作用を効果的に保護(hù)および管理するには、基本認(rèn)証やJSON処理に関するトークンなどのミドルウェアを介した認(rèn)証が重要です。
REST:開発者フレンドリーUI

まず、APIは開発者のユーザーインターフェイスであるため、フレンドリーでシンプルで使いやすく、もちろん快適でなければなりません。単純だがよく書かれたreadmeファイルであっても、ドキュメントは良いスタートです。必要な情報(bào)が最も少ないのは、サービススコープの概要と、メソッドとアクセスポイントのリストです。適切な要約は、次のようになります。>連絡(luò)先とメモの2つのオブジェクトタイプがあります。各連絡(luò)先には、名、姓、メールアドレスなどの基本的な屬性があります。さらに、各連絡(luò)先は、それに関連付けられたマークダウン形式の複數(shù)のノートを持つことができます。

次に、実裝するすべてのリソースと操作をリストする方が良いでしょう。これは、アプリケーションのワイヤーフレームを視覚化するのに相當(dāng)するものと見なすことができます。休息の主要な原則に従って、各リソースは、操作がアクセスに使用されるHTTPメソッドであるU(xiǎn)RLで表されます。たとえば、Get/API/CONTACTS/12はID 12との連絡(luò)先を取得し、Put/API/CONTACTS/12は同じ連絡(luò)先を更新します。完全なメソッドリストは次のとおりです

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個(gè)新聯(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>

より完全で専門的なドキュメントについては、Swagger、Apidoc、Google Apis Discovery Serviceなどのツールを使用することを検討できます。ユーザーはあなたを好むでしょう!

ツールと設(shè)定

APIの構(gòu)築に使用する主なツールは、スリムなフレームワークです。なぜ? &gt;

これは本當(dāng)です。その強(qiáng)力なルーティング機(jī)能により、取得と投稿以外の使用方法を簡(jiǎn)単に使用できます。HTTPメソッドオーバーライド(HTTPヘッダーと非表示のポストフィールドを介して)の組み込みサポートを提供し、アプリケーションプログラムとAPIを有効にするためのミドルウェアと追加機(jī)能をフックできます。開発は本當(dāng)に簡(jiǎn)単です。 Slimと一緒に、イディオームを使用してデータベースレイヤーにアクセスし、モノログを使用してロギングします。したがって、composer.jsonファイルは次のようになります

{
  "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/"
    }
  }
}
Slim/ExtrasおよびSlim/Middlewareパッケージは、コンテンツタイプの解像度や基本認(rèn)証などの便利な機(jī)能を提供します。カスタムクラスは、API名空間の下とLIBディレクトリにあります。この時(shí)點(diǎn)で、作業(yè)ディレクトリ構(gòu)造は次のとおりです。

アプリケーションのフロントエンドコントローラーはpublic/index.phpであり、すべての非ファイルまたはディレクトリトラフィックは、標(biāo)準(zhǔn)のURL書き換えルールを介してここでリダイレクトされます。次に、すべての初期化コードをbootstrap.phpに入れて、後で表示されます。共有ディレクトリには、ログ、構(gòu)成ファイル、SQLiteデータベース、ダンプファイル、SSL証明書などのデータが含まれています。 BINディレクトリには、提供された.SQLファイルを使用してデータベースを作成し、データをインポートするユーティリティスクリプトが含まれています。
<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>

sslはどこにでもあります

APIはHTTPSモードでのみアクセスでき、リダイレクトは必要ありません。これにより、認(rèn)証ロジックが簡(jiǎn)素化され、不適切に構(gòu)成されたクライアントが暗號(hào)化されていないエンドポイントにアクセスできなくなります。この方法を設(shè)定する最も簡(jiǎn)単で最も論理的な方法は、Webサーバーまたはプロキシサーバーを介して直接行動(dòng)することです。私はこれを行うために古い信頼できるApacheを使用しています、そして私の仮想ホストファイルは次のようになります:<

最初にディレクトリ設(shè)定を定義して、サイトのHTTPバージョンとHTTPSバージョンに共通するようにします。非セキュアなホスト構(gòu)成では、mod_rewriteを使用して、任意の非セキュア接続に403の禁止エラーを発行し、セキュリティセクションで、自己署名証明書でSSLを設(shè)定し、SLIM_ENV変數(shù)を伝えるSLIM_ENV変數(shù)を設(shè)定します。現(xiàn)在のアプリケーションモードをスリムします。 Apacheの自己署名証明書を作成してインストールする方法の詳細(xì)については、SSLShopperのこの記事を參照してください。明確な目標(biāo)、基本的なディレクトリ構(gòu)造、サーバー設(shè)定ができるようになったので、Composer.pharのインストールを?qū)g行して、コードの書き込みを開始します。

<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>

ブートプログラムとフロントエンドコントローラー

前述のように、Bootstrap.phpファイルは、アプリケーション設(shè)定とオートローダー設(shè)定をロードする責(zé)任があります。

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個(gè)新聯(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>

最初に、現(xiàn)在の環(huán)境を取得します。 .phpという名前のファイルが存在する場(chǎng)合、ロードされます。そうしないと、デフォルトの構(gòu)成ファイルが読み込まれます。スリム固有の設(shè)定は$ config ['app']配列に保存され、基本的なスリムオブジェクトを拡張するアプリケーションのコンストラクターに渡されます(オプションですが推奨)。たとえば、ステートメント:

{
  "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/"
    }
  }
}

app/path/share/logs/envname_yyy-mm-dd.logのファイルに書き込むモノログロガーを構(gòu)成します。次に、いくつかの改善の後(ソースコードで表示できます)、生成されたログライターを取得し、データベースに接続しようとします。

<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>
最後に、必要なミドルウェアをアプリケーションインスタンスに追加しました。 Slimのミドルウェアはオニオン層のようなもので、最初に追加するミドルウェアは最も內(nèi)側(cè)のレイヤーになるため、ミドルウェアの順序が重要です。 APIで次のミドルウェアを使用しますボデ?!弗佶攻去抓楗匹%攻姗`ティリティミドルウェア; - 認(rèn)証(最外層)。既存のコンテンツタイプを除き、これらすべてを書きます。 Bootstrapファイルの最後に、2つのグローバル変數(shù)$ APP(AP)と$ log(ログライター)を定義します。このファイルは、フロントエンドコントローラーindex.phpによってロードされ、そのファイルで魔法が発生します。

ルーティング構(gòu)造

Slimには、Route Groupsと呼ばれる素晴らしい機(jī)能があります。この機(jī)能を使用して、このようなアプリケーションルートを定義できます。

2つのネストされたグループ /APIと /V1を作成したので、「URLのバージョンコントロール」ベストプラクティスを簡(jiǎn)単に接著できます。また、ユーザー読み取り可能なコンテンツを含む可能性のある/API/のオプションのルートと、実際の世界にアプリケーションのパブリックユーザーインターフェイスが含まれる場(chǎng)合がある共通のルートURL(/)URLを作成しました。
<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>

jsonミドルウェア

私の最初のアプローチは、認(rèn)証とJSONリクエスト /応答のために /V1グループ內(nèi)でルーティングミドルウェア(別のスリムミドルウェア)を使用することでしたが、クラシックミドルウェアを使用するためにより実用的で簡(jiǎn)潔であることがわかりました。前述のように、ミドルウェアは、Slimmiddlewareから継承されたクラスのインスタンスです。スリムミドルウェアのcall()メソッドは、操作がグローバルミドルウェアとしてリンクされている場(chǎng)合、$ app-&gt; add()メソッドを使用して自動(dòng)的に実行されます。

JSONミドルウェアは、「JSON応答のみ」と「JSONエンコーディングボデ?!工趣い?つのベストプラクティスを?qū)g裝しています。この方法は次のとおりです
<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個(gè)新聯(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>

ルートパスをミドルウェアコンストラクターに渡すことができます。この場(chǎng)合、ミドルウェアがサイトのAPI部分にのみ適用されるように、 /API /V1を渡します?,F(xiàn)在のパスが応答コンテンツタイプのヘッダーと一致する場(chǎng)合、応答コンテンツタイプのヘッダーはアプリケーション/JSONに強(qiáng)制され、リクエスト方法を確認(rèn)します。要求方法が書き込みを有効にするリクエストメソッドの1つである場(chǎng)合(Put、Post、Patch)、リクエストコンテンツタイプのヘッダーはApplication/JSONでなければなりません。すべてが正常に機(jī)能する場(chǎng)合、ステートメント$ this&gt; next&gt; call()は、チェーン內(nèi)の次のミドルウェアを?qū)g行します。

認(rèn)証

アプリケーションはデフォルトでHTTPSで実行されるため、基本認(rèn)証よりもトークンが優(yōu)先される方法を使用することにしました。APIキーは、基本的なHTTP認(rèn)証ヘッダーのユーザー名フィールドに送信されます(パスワードは不要))。これを行うために、既存のSlim httpbasicauthを変更することにより、Tokenoverbasicauthというスリムミドルウェアクラスを書きました。このミドルウェアはチェーンで最初に実行されるため、最後のものとして追加され、コンストラクターにオプションのルートパスパラメーターが必要です。

{
  "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/"
    }
  }
}
このメソッドは、PHP_AUTH_USERリクエストヘッダーをAuth Tokenの検索で検索し、存在しないか無(wú)効である場(chǎng)合は、401の禁止ステータスと認(rèn)証ヘッダーをクライアントに渡します。 Verify()メソッドは保護(hù)されているため、サブクラスによってオーバーライドできます

ここでは、ユーザーテーブルのAPIキーの存在を確認(rèn)するだけで、有効なユーザーを見つけた場(chǎng)合、次のレイヤー(ratelimit)で使用するためにアプリケーションコンテキストに追加されます。このクラスを変更または拡張して、獨(dú)自の認(rèn)証ロジックを注入するか、OAuthモジュールを使用できます。 OAuthの詳細(xì)については、Jamie Munroの記事を參照してください。
<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>

使用されたエラーペイロード

APIは、可能であれば、使用可能な形式、できればJSON表現(xiàn)で有用なエラーメッセージを表示する必要があります。エラーコードとメッセージを含む最小ペイロードが必要です。さらに、検証エラーはより多くのセグメンテーションが必要です。 Slimを使用して、それぞれ$ app-&gt; notfound()および$ app-&gt; error()メソッドを使用して、404エラーとサーバーエラーを再定義できます。

<code>URL             HTTP Method  Operation
/api/contacts   GET          返回聯(lián)系人數(shù)組
/api/contacts/:id GET          返回 ID 為 :id 的聯(lián)系人
/api/contacts   POST         添加一個(gè)新聯(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>

エラーはより単純ではありません:最初に要求されたメディアタイプを取得し、次に$ ISAPIフラグが現(xiàn)在のURLが /API /V*グループにあるかどうかを教えてくれます。クライアントがAPI URLを要求するか、JSONコンテンツタイプのヘッダーを送信した場(chǎng)合、JSON出力を返します。そうしないと、この例に示すようにテンプレートをレンダリングするか、靜的HTMLを印刷できます。他のエラーは少し注意が必要であり、$ app-&gt; error()メソッドが例外が発生したときにトリガーされ、標(biāo)準(zhǔn)のPHPエラーをErrorexceptionオブジェクトに変換します。セキュリティの脆弱性を回避するために、あまりにも多くの內(nèi)部メカニズムを公開することなく、クライアントに有用なエラーを提供する方法が必要です。このアプリケーションでは、2つのカスタム例外、ApiexceptionとapiexceptionValidationExceptionを作成しました。これらは一般に公開されます。他のすべての例外タイプはログにログに記録され、開発モードでのみ表示されます。

{
  "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/"
    }
  }
}

$ app-&gt; error()メソッドは、スローされた例外をパラメーターとして受信します。デフォルトでは、必要なすべてのデータを取得して$エラーアレイを入力します。その後、生産モードの場(chǎng)合は、プライベートデータを設(shè)定し、一般的なデータでメッセージを書き直します。 Custom ValidationExceptionクラスには、最終的なペイロードに追加された一連の検証エラーを返すカスタムgetData()メソッドがあります。次に、リクエストに基づいてJSONまたはHTMLにエラーを表示します。 API側(cè)では、次のように簡(jiǎn)単なエラーが発生します。

<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>
または以下に示すような完全な検証エラー:

<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>

結(jié)論

APIのコアができました。次のセクションでは、完全に機(jī)能的なサービスを提供するためにコンテンツを追加します。この間、このセクションにリンクされている記事をお?dú)葺Xにお読みください。これらは有用なAPIデザインの原則の寶庫(kù)です。

FAQ(FAQ)のゼロからの休憩の構(gòu)築に関する

REST APIの重要なコンポーネントは何ですか?

REST APIは、いくつかの重要なコンポーネントで構(gòu)成されています。 1つ目は、実行する操作のタイプを定義するHTTPメソッドです。これらには、get、post、put、削除などが含まれます。 2番目のコンポーネントは、リソース識(shí)別子であるU(xiǎn)RLまたはURIです。 3番目のコンポーネントはHTTPヘッダーで、HTTPリクエストと応答のメタデータを搭載しています。 4番目のコンポーネントは本體またはペイロードで、実際のデータが送信されます。最後に、ステータスコードは、HTTP要求の成功または失敗を示します。

私のREST APIを保護(hù)する方法は?

レストAPIを保護(hù)することは、機(jī)密データを保護(hù)するために不可欠です。認(rèn)証と承認(rèn)のために、APIキー、OAuth、JWTなどのさまざまな方法を使用できます。さらに、データ転送は常にデータの整合性と機(jī)密性を確保するために使用されます。脆弱性から保護(hù)するために、APIとその依存関係を定期的に更新およびパッチします。

私のREST APIのバージョンをバージョンする方法は?

REST APIのバージョンを使用すると、既存のクライアントに影響を與えることなく、非破壊的な変更を?qū)毪扦蓼埂?URLにバージョン番號(hào)を含めるか、カスタムリクエストヘッダーを使用してAPIをバージョンすることができます。すべての変更を記録し、API消費(fèi)者に新しいバージョンとその機(jī)能を通知することを忘れないでください。

REST APIのエラーを処理する方法は?

REST APIでの正しいエラー処理により、その使いやすさと信頼性が向上します。 HTTPステータスコードを使用して、エラータイプを示します。エラーの詳細(xì)については、応答本體にエラーメッセージを含めてください。これにより、クライアントは何が間違っているのか、どのように問(wèn)題を解決するかを理解するのに役立ちます。

REST APIをテストするにはどうすればよいですか?

REST APIをテストして、期待どおりに機(jī)能し、さまざまなシナリオを処理できることを確認(rèn)します。手動(dòng)テストには、PostmanやCurlなどのツールを使用できます。自動(dòng)テストについては、単體テスト、統(tǒng)合テスト、およびエンドツーエンドテストの使用を検討してください。モックサーバーを使用してAPI応答をシミュレートし、APIがさまざまな種類の応答を処理する方法をテストします。

私のREST APIを記録する方法は?

優(yōu)れたドキュメントにより、REST APIが理解し、使用しやすくなります。エンドポイント、要求方法、要求パラメーター、リクエスト例、応答ステータスコード、および応答の例に関する詳細(xì)情報(bào)が含まれています。 SwaggerやPostmanなどのツールを使用して、APIドキュメントを生成およびホストすることができます。

RESTFUL APIを設(shè)計(jì)する方法は?

設(shè)計(jì)RESTFUL APIには、リソース、エンドポイント、およびメソッドの計(jì)畫が含まれます。リソースには名詞と操作にはHTTPメソッドを使用します。 APIをシンプルで直感的に保ちます。ステータスコードを使用して、リクエストの結(jié)果を示します。 APIのステートレスを作成します。つまり、各リクエストには、リクエストを処理するために必要なすべての情報(bào)が含まれている必要があります。

私のREST APIで結(jié)果をページングする方法は?

ページングは??、単一の応答で返されるデータの量を制限するのに役立ちます。 「ページ」や「制限」などのクエリパラメーターを使用してページングを?qū)g裝できます。応答ヘッダーまたはボディにメタデータを含めて、現(xiàn)在のページ、ページの総數(shù)、アイテムの総數(shù)などを示します。

私のREST APIのレートを制限する方法は?

レート制限は、REST APIを亂用から保護(hù)し、公正な使用を保証します。 IPアドレス、APIキー、またはユーザーアカウントに基づいてリクエストの數(shù)を制限できます。 HTTPヘッダーを使用して、クライアントにレート制限ステータスを通知します。

私のREST APIを展開する方法は?

REST APIをサーバーまたはクラウドプラットフォームに展開できます。展開オプションを選択するときは、コスト、スケーラビリティ、セキュリティなどの要因を考慮してください。展開プロセスを自動(dòng)化するために、継続的な統(tǒng)合と継続的配信(CI/CD)ツールを使用します。 APIのパフォーマンスと使用量を監(jiān)視して、ユーザーのニーズを満たしていることを確認(rèn)します。

以上がゼロからREST APIを構(gòu)築する:はじめにの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場(chǎng)合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識(shí)は、整數(shù)と浮動(dòng)小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號(hào)は自動(dòng)的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識(shí)の使用 - 標(biāo)識(shí)、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識(shí)を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識(shí)を使用し、結(jié)果は浮動(dòng)小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識(shí)を採(cǎi)取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場(chǎng)合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles