Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SKDs対象のWeb API設計概論〜Laravelを添えて〜

arm4
September 21, 2018

SKDs対象のWeb API設計概論〜Laravelを添えて〜

arm4

September 21, 2018
Tweet

More Decks by arm4

Other Decks in Technology

Transcript

  1. 今日、話すこと 今日、話すこと Web API って何? API を使う人って誰? RESTful なAPI の設計思想とは?

    エンドポイントって何? SSKDs 対象のWeb API 設計について考えてみよう どういう時にSSKDs 対象のAPI を設計するの? Laravel での具体的な設計事例 もっと詳しくAPI 設計について知りたい人は?
  2. 代表的な API 代表的な API Twitter API Twitter API ツイートの取得などができる。 YouTube

    API YouTube API YouTube ビデオの情報の取得などができる。 Google Maps Platform Google Maps Platform 地図情報の取得などができる。 https://developer.twitter.com/ https://www.youtube.com/yt/dev/ https://cloud.google.com/maps-platform/
  3. LSUDs LSUDs Large set of unknown developers の略。 公開されたWeb API

    を使う未知の大勢の開発者たち のこと。 SSKDs SSKDs Small set of known developers の略。 非公開・社内用のAPI を使う限定された顔見知りの 開発者たちのこと。
  4. REST REST Representational State Transfer の略。 ネットワーク上のリソースを一意なURI で表し、 そのURI に「GET

    」や「POST 」といったHTTP メソッ ドでアクセスすることでデータの送受信を行うと いう設計思想。
  5. 要するに? Method URI Action GET or HEAD users UserController@index POST

    users UserController@store GET or HEAD users/{user_id} UserController@show PATCH or PUT users/{user_id} UserController@update DELETE users/{user_id} UserController@destroy
  6. ユーザ管理 API のエンドポイント ユーザ管理 API のエンドポイント 目的 Method エンドポイント ユーザ一覧

    の取得 GET 新規ユーザ 登録 POST ユーザ情報 の取得 GET ユーザの更 新 PUT/PATCH ユーザの削 除 DELETE http://api.example.com/v1/users http://api.example.com/v1/users http://api.example.com/v1/users/{user_id} http://api.example.com/v1/users/{user_id} http://api.example.com/v1/users/{user_id}
  7. 新着のお問い合わせ一覧取得エンドポイント 新着のお問い合わせ一覧取得エンドポイント json レスポンス json レスポンス https://example.com/api/new_inquiries { new_inquiries: [

    { inquiry_id: 56, message_body: "入塾 検討 資料 送付 school_name: "hoge進学塾", school_id: 3, last_name: "田中", first_name: "太郎", created_at: "2018-08-11 08:20:44", updated_at: "2018-08-11 08:20:44", }, { inquiry_id: 52, message_body: "英語 成績 上 体験授業 希望
  8. ユーザ管理ページで必要な API を考える ユーザ管理ページで必要な API を考える ユーザ一覧の取得 ユーザの検索 ユーザ情報の取得 新規ユーザ登録

    ユーザの編集 ユーザの削除 ユーザフォームで使うアカウント権限リスト情 報 ユーザフォームで使う都道府県リスト情報 ※ ユーザ管理ページはSPA 設計でページ遷移はないものとする
  9. API 設計例 API 設計例 目的 Method URI ユーザ一覧の 取得&検索 GET

    api/users 新規ユーザ登録 POST users ユーザの編集 PATCH users/{user_id} ユーザの削除 DELETE users/{user_id} ユーザフォームで 使うデータの取得 GET api/users/form-data
  10. web.php web.php Route::middleware(['auth'])->group(function() { Route::prefix('api')->name('api.')->group(function() { Route::prefix('users')->name('users.')->group(function Route::get('/', 'UserController@apiIndex')->name(' Route::get('form-data',

    'UserController@apiFormDat }); }); Route::prefix('users')->name('users')->group(function() { Route::get('/', 'UserController@index'); Route::post('/', 'UserController@store')->name('.store Route::patch('/{user}', 'UserController@update')->name Route::delete('/{user}', 'UserController@destroy')->na }); });
  11. web.php web.php Route::middleware(['auth'])->group(function() { Route::prefix('api')->name('api.')->group(function() { Route::prefix('users')->name('users.')->group(function Route::get('/', 'UserController@apiIndex')->name(' Route::get('form-data',

    'UserController@apiFormDat Route::post('/', 'UserController@store')->name('st Route::patch('/{user}', 'UserController@update')-> Route::delete('/{user}', 'UserController@destroy') }); }); Route::prefix('users')->name('users')->group(function() { Route::get('/', 'UserController@index'); }); });