5分でDingo APIにアクセス


ベースhttps://laravel-china.org/doc...ドキュメントはDingoをより簡潔に記述し、重点を突き刺し、実践を重視する.
概要
Dingo APIは、自分のAPIを簡単に迅速に構築するのに役立ちます.このスキームの目標は、できるだけ柔軟性を維持することですが、すべての状況をカバーし、すべての問題を解決することはできません.
インストール
次のコードをcomposerに追加します.jsonでcomposer updateまたはcomposer installを実行
"require": {
    "dingo/api": "2.0.0-alpha1"
}

Laravel
プロファイルをパブリッシュし、このコマンドを実行するとconfigディレクトリの下でapiが生成されます.phpプロファイル
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
Lumen

Lumen
あなたが使用しているlumenの場合、lumenにvendorコマンドがないためbootstrap/appを開きます.phpおよびサービスプロバイダの登録:
$app->register(Dingo\Api\Provider\LumenServiceProvider::class);

Facade
APIには2つのFacadeが付属しており、適宜使用できます.
Dingo\Api\Facade\API

これはスケジューラのFacadeで、いくつかの使いやすい補助方法を提供しています.
Dingo\Api\Facade\Route

このFacadeを使用して、APIの現在のルーティング、リクエスト、現在のルーティングの名前のチェックなどを行うことができます.
config/appでphp aliases配列内登録Facade
'aliases' => [
    ...
    'API'          => Dingo\Api\Facade\API::class,
    'ApiRoute'     => Dingo\Api\Facade\Route::class,
],

コンフィギュレーション
はい.EnvファイルにDingo APIを設定する
  • API_STANDARDS_TREE
  • API_SUBTYPE
  • API_PREFIX
  • API_VERSION
  • API_NAME
  • API_CONDITIONAL_REQUEST
  • API_STRICT
  • API_DEBUG
  • API_DEFAULT_FORMAT

  • API_STANDARDS_TREE
    Standards Tree標準ツリー
  • 未登録のツリー(x)は、主にローカルおよびプライベート環境
  • を表す.
  • プライベートツリー(prs)は主に商業発表のないプロジェクト
  • を表す.
  • 仕入先ツリー(vnd)は、主に公開されたプロジェクト
  • を示す.
    gitとの分岐に似た概念的なもので、正常に開発されていればx,prs,vndの記述に従って記入すればよい.
    API_SUBTYPE
    リクエストヘッダで彼を使う必要がある
    API_PREFIX
    アドレスの接頭辞は、必要でない場合は'/'に記入してください.
    API_VERSION
    インタフェースのバージョン、デフォルトのアクセスバージョン
    API_NAME
    インタフェースの名前、apiドキュメントを生成するために使用され、他の場所では使用されません.
    API_CONDITIONAL_REQUEST
    条件要求はデフォルトでオンであり、これはクライアントのキャッシュメカニズムが可能な場合にAPI要求をキャッシュするのに有利である.
    API_STRICT
    要求ごとにバージョンを持たなければならないことを強制します.
    Accept:application/vnd.{API_SUBTYPE}.v2+json

    API_DEBUG
    デバッグを開くかどうか、開くとapiにアクセスします.
    API_DEFAULT_FORMAT
    返されるタイプは、一般的にjsonです
    くり1個
    API_STANDARDS_TREE=vnd
    API_SUBTYPE=catering
    API_PREFIX=/
    API_VERSION=v1
    API_NAME="My API"
    API_CONDITIONAL_REQUEST=false
    API_STRICT=false
    API_DEBUG=true
    API_DEFAULT_FORMAT=json

    使用
    ここでは実際の業務と結びつけて説明する
    テーブル構造
    member
    CREATE TABLE `member` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `tel` bigint(20) DEFAULT NULL COMMENT '    ',
      `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '    ',
      `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '     0:  ',
      `created_at` timestamp NULL DEFAULT NULL,
      `updated_at` timestamp NULL DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `member_tel_unique` (`tel`),
      KEY `member_tel_status_index` (`tel`,`status`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    member_data
    CREATE TABLE `member_data` (
      `member_id` bigint(20) NOT NULL COMMENT '    ',
      `sex` enum('0','1','2') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '   0=>   1=>   2=>  ',
      `nick_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '  /  ',
      `img` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '    ',
      `created_at` timestamp NULL DEFAULT NULL,
      `updated_at` timestamp NULL DEFAULT NULL,
      UNIQUE KEY `member_data_member_id_unique` (`member_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    新規ルーティング
    $api = app ('Dingo\Api\Routing\Router');
    $api->post ('user/register', 'App\Api\Controllers\UserController@register');
    });

    カスタムレスポンスの作成
     200,
                    'data'        => $data,
                ];
            }
            
            public static function error($message = '')
            {
                return [
                    'status_code' => 0,
                    'message'     => $message,
                ];
            }
            
            public static function return($statusCode, $message, $data = [])
            {
                return [
                    'status_code' => $statusCode,
                    'message'     => $message,
                    'data'        => $data,
                ];
            }
        }

    コントローラの作成
    request = $request;
                
                $this->userService = $userService;
            }
            
            public function register()
            {
                $result = $this->userService->register ($this->request->all ());
                
                if ($result['status_code'] == 200) {
                    return $this->response->array (Response::return (200, '    ', [
                        'user_id' => $result['data'],
                    ]));
                }
                
                return $this->response->error ($result['message'], 500);
            }
        }

    サービスの作成
    member = $member;
            }
            
            public function register($data)
            {
                try {
                    return Response::success ((new CreateUser())->execute ($data));
                } catch (\Exception $e) {
                    return Response::error ($e->getMessage ());
                }
            }
        }

    アクションの作成
    tel      = $data['tel'];
                $member->password = md5 ($data['password']);
                $result           = $member->save ();
                
                if (!$result) {
                    throw new \Exception('    ');
                }
                
                $memberData            = new MemberData();
                $memberData->member_id = $member->id;
                $memberData->sex       = "2";
                $memberData->nick_name = "";
                $memberData->img       = "";
                $memberData->save ();
                
                return $member->id;
            }
        }

    リクエスト
     "http://api.c.com/user/register",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "-----011000010111000001101001\r
    Content-Disposition: form-data; name=\"tel\"\r
    \r
    18510362698\r
    -----011000010111000001101001\r
    Content-Disposition: form-data; name=\"password\"\r
    \r
    zjk1221\r
    -----011000010111000001101001--", CURLOPT_HTTPHEADER => array( "accept: application/vnd.catering.v1+json", "cache-control: no-cache", "content-type: multipart/form-data; boundary=---011000010111000001101001", "postman-token: e7cf665f-3698-217a-cd71-35c3a44f42bc" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }

    難病
    一般的な問題と解決策のリスト
    バージョン区分後のアクセス方法
    API_VERSIONが設定したバージョンはデフォルトのアクセスバージョンにすぎません.他のバージョンにアクセスするにはheaderに追加する必要があります.
    Accept:application/vnd.{API_SUBTYPE}.v2+json

    接頭辞を追加したくない場合はどうすればいいですか?
    API_PREFIX=/

    API_PREFIXは空ではなく、内容を記入しなければなりません.それは当然の/が正しいに違いありません.
    お礼を言う
    ここを見てくれてありがとう.以上、個人研究開発の総括とコードを手伝ってくれれば嬉しいです.もし何か問題があったり、文章に何か間違いがあったら、コメントエリアで返事をして、すぐに私が他人を誤解することを阻止してください.ありがとう