亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
私の最初のアプローチは、認(rèn)証とJSONリクエスト /応答のために /V1グループ內(nèi)でルーティングミドルウェア(別のスリムミドルウェア)を使用することでしたが、クラシックミドルウェアを使用するためにより実用的で簡潔であることがわかりました。前述のように、ミドルウェアは、Slimmiddlewareから継承されたクラスのインスタンスです。スリムミドルウェアのcall()メソッドは、操作がグローバルミドルウェアとしてリンクされている場合、$ app-> add()メソッドを使用して自動的に実行されます。
REST APIのエラーを処理する方法は?
REST APIをテストするにはどうすればよいですか?
私のREST APIを記録する方法は?
RESTFUL APIを設(shè)計する方法は?
私の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)証やストレージサービスなど、幅広い有用な機能にアクセスできます。これは、あなたとユーザーにとって有益です。獨自のAPIを公開することにより、アプリケーションは「構(gòu)成の一部」になり、これを考えたことのない方法で使用します...もちろん、これを正しい方法で行うと。この2部構(gòu)成のシリーズでは、一連の実際のベストプラクティスを使用して、PHPアプリケーション用のRESTFUL APIレイヤーを作成する方法を紹介します。このプロジェクトの完全なソースコードは、パート2の終わりに提供されます。

キーポイント

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

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

次に、実裝するすべてのリソースと操作をリストする方が良いでしょう。これは、アプリケーションのワイヤーフレームを視覚化するのに相當(dāng)するものと見なすことができます。休息の主要な原則に従って、各リソースは、操作がアクセスに使用されるHTTPメソッドであるURLで表されます。たとえば、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         添加一個新聯(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)です。その強力なルーティング機能により、取得と投稿以外の使用方法を簡単に使用できます。HTTPメソッドオーバーライド(HTTPヘッダーと非表示のポストフィールドを介して)の組み込みサポートを提供し、アプリケーションプログラムとAPIを有効にするためのミドルウェアと追加機能をフックできます。開発は本當(dāng)に簡単です。 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)証などの便利な機能を提供します。カスタムクラスは、API名空間の下とLIBディレクトリにあります。この時點で、作業(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)証ロジックが簡素化され、不適切に構(gòu)成されたクライアントが暗號化されていないエンドポイントにアクセスできなくなります。この方法を設(shè)定する最も簡単で最も論理的な方法は、Webサーバーまたはプロキシサーバーを介して直接行動することです。私はこれを行うために古い信頼できる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         添加一個新聯(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という名前のファイルが存在する場合、ロードされます。そうしないと、デフォルトの構(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と呼ばれる素晴らしい機能があります。この機能を使用して、このようなアプリケーションルートを定義できます。

2つのネストされたグループ /APIと /V1を作成したので、「URLのバージョンコントロール」ベストプラクティスを簡単に接著できます。また、ユーザー読み取り可能なコンテンツを含む可能性のある/API/のオプションのルートと、実際の世界にアプリケーションのパブリックユーザーインターフェイスが含まれる場合がある共通のルート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)でルーティングミドルウェア(別のスリムミドルウェア)を使用することでしたが、クラシックミドルウェアを使用するためにより実用的で簡潔であることがわかりました。前述のように、ミドルウェアは、Slimmiddlewareから継承されたクラスのインスタンスです。スリムミドルウェアのcall()メソッドは、操作がグローバルミドルウェアとしてリンクされている場合、$ app-&gt; add()メソッドを使用して自動的に実行されます。

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         添加一個新聯(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>

ルートパスをミドルウェアコンストラクターに渡すことができます。この場合、ミドルウェアがサイトのAPI部分にのみ適用されるように、 /API /V1を渡します?,F(xiàn)在のパスが応答コンテンツタイプのヘッダーと一致する場合、応答コンテンツタイプのヘッダーはアプリケーション/JSONに強制され、リクエスト方法を確認(rèn)します。要求方法が書き込みを有効にするリクエストメソッドの1つである場合(Put、Post、Patch)、リクエストコンテンツタイプのヘッダーはApplication/JSONでなければなりません。すべてが正常に機能する場合、ステートメント$ 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の検索で検索し、存在しないか無効である場合は、401の禁止ステータスと認(rèn)証ヘッダーをクライアントに渡します。 Verify()メソッドは保護されているため、サブクラスによってオーバーライドできます

ここでは、ユーザーテーブルのAPIキーの存在を確認(rèn)するだけで、有効なユーザーを見つけた場合、次のレイヤー(ratelimit)で使用するためにアプリケーションコンテキストに追加されます。このクラスを変更または拡張して、獨自の認(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         添加一個新聯(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コンテンツタイプのヘッダーを送信した場合、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()メソッドは、スローされた例外をパラメーターとして受信します。デフォルトでは、必要なすべてのデータを取得して$エラーアレイを入力します。その後、生産モードの場合は、プライベートデータを設(shè)定し、一般的なデータでメッセージを書き直します。 Custom ValidationExceptionクラスには、最終的なペイロードに追加された一連の検証エラーを返すカスタムgetData()メソッドがあります。次に、リクエストに基づいてJSONまたはHTMLにエラーを表示します。 API側(cè)では、次のように簡単なエラーが発生します。

<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のコアができました。次のセクションでは、完全に機能的なサービスを提供するためにコンテンツを追加します。この間、このセクションにリンクされている記事をお気軽にお読みください。これらは有用なAPIデザインの原則の寶庫です。

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

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

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

私のREST APIを保護する方法は?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

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

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時にネストを避ける必要があります。

発電機はPHPでどのように機能しますか? 発電機はPHPでどのように機能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 Jul 12, 2025 am 03:15 AM

PHPでは、四角い括弧または巻き毛裝具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお勧めします。インデックスは0から始まり、範(fàn)囲外のアクセスはnull値を返し、値を割り當(dāng)てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結(jié)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(shù)を均一に使用することをお勧めします。

PHPの學(xué)習(xí):初心者向けガイド PHPの學(xué)習(xí):初心者向けガイド Jul 18, 2025 am 04:54 AM

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

See all articles