# API v3 仕様策定

参照  
- https://qiita.com/mserizawa/items/b833e407d89abd21ee72  
- https://qiita.com/suin/items/f7ac4de914e9f3f35884

## Express response に専用functionを追加
まだ動かしてない。実装イメージ。
タイプチェックは実装時に追加。
```
express.response.apiv3 = function(obj) { // not arrow function
  this.json({
    oK: true,
    data: {
      ...obj,
    },
  });
};

express.response.apiv3Err = function(status, errors) { // not arrow function
  this.status(status).json({
    oK: false,
    status,
    errors,
  });
};
```

## 例
```
// 成功時
res.apiv3({ user: { id: 1, name: 'John' } });

// response
{
  ok: true,
  data: {
    user: {
      id: 1,
      name: 'John',
    }
  }
}
```

```
// エラー時
res.apiv3Err(new Error('err example'));


// response
{
  ok: false,
  status: 403,
  errors: [
    {
      message: 'err example',
    },
  ],
}
```

## CRUD
- GET /groups - グループのリストを取得する
- GET /groups/12 - 指定したグループの情報を取得する
- GET /groups/12/users - 指定したグループのユーザーのリストを取得する
- POST /groups - 新しいグループを作成する
- PUT /groups/12 - グループ #12 を更新する
- DELETE /groups/12 - グループ #12 を削除する

### フィルター
- GET /groups?name=exmaple

### ソート  
- +昇順  
- -降順
- GET /groups?sort=-updated_at

### フィールドの指定
- GET /groups?fields=id,name,createdAt

### ページング
- GET /groups?page=3

# その他
- access token?
- rate limit?
- X-HTTP-Method-Override? (get, post しか使えない人のため)
- GROWIエラーコード決める？


---

## Page Navigation

- Canonical URL: https://dev.growi.org/資料/内部仕様/apiv3仕様
- Permalink: https://dev.growi.org/5cf494d4aa8c91003eb0b481
- Parent: [内部仕様](/5cc1c93a973c65003eeca8c9.md)
- Children: 0 total
- Total descendants: 0
- Siblings: 48 total
  - [AWS・メーラー周りの改善](/5d02003202145d003e1babf6.md)
  - [Audit Log Bulk Export](/68b96f7fcde220ddd8dad822.md)
  - [ConfigManager](/5cc9975f30890b003fe90935.md)
  - [ElasticSearchのインデックスリビルド](/5e3ff13564387500480619a1.md)
  - [Elasticsearchから取得できるPagesに関するデータ](/614aad9c0043a10051e15701.md)
  - [EmojiPicker](/6333fb298e520dbb752dc0cd.md)
  - [EventEmitterの利用](/61391728d5f8360051fd4942.md)
  - [G2G Transfer](/6346a2e0e4791185c5e88285.md)
  - [GROWI Bot](/62a71cdfb1519362cc276234.md)
  - [HackMD連携](/5d27efd443f7f50048a78e0a.md)
  - [Handsontable統合メモ](/5cc99eac30890b003fe9093b.md)
  - [InAppNotificationにニュースを配信する](/69ab8eb7659066cd59ddb618.md)
  - [LDAPグループ同期](/646d5f73d184d74b40517c3e.md)
  - [Packagesのエラーハンドリングアーキテクチャ](/60e6727cf04bf00049b9d514.md)
  - [Page Bulk Export](/655834752aa37f82842a2034.md)
  - [PageOperation](/62010f2f16bc406c1b5e291b.md)
  - [SAML RoleとGrowiの権限の連携](/5d25e82feeb1f9003ee9b64c.md)
  - [SMTP設定に関する仕様](/5f4ef239cff9700048251c9a.md)
  - [SWR Utilities](/63735c96c29dff4657eb78ca.md)
  - [Sidebar](/5edacd0e3512890048ddc19f.md)
  - [Slack Command Handling](/60ee432f4a58890049d183cd.md)
  - [WebpackAssetsのHTMLへの注入](/5e3ee633ccdb6f0048e8c124.md)
  - [audit-log](/62a1639c028badd4ac23f533.md)
  - [growi-database-plugin](/634784794b3568aa883bfca6.md)
  - [skipSSR](/64bf8e68a1e72e1b846d02fd.md)
  - [socket.io room 機能を使った通知設計](/6137540af2060f00510d56bb.md)
  - [v5.0.0～v7.0.15 でのRevisionデータマイグレーションバグ](/69301054963f68dfcf2b7111.md)
  - [お知らせ機能](/650d5e741647c0285cbb8a33.md)
  - [アンケート機能](/6385911e1632aa30f4dae6a4.md)
  - [インストールプロセス](/6009091dd3b38b00486b4ba5.md)
  - [インラインコメント機能](/650154e4a3498dcb94e91b36.md)
  - [ショートカットキー](/5cc1cb12973c65003eeca8cc.md)
  - [スケルトン表示ガイドライン](/62d7ca7fb18c4bec89d81a12.md)
  - [タグに関する仕様](/6171077c700078147672e3e0.md)
  - [ビルトインエディタでの同時多人数編集](/6524a63e46f2d6a2691e430a.md)
  - [ファイルアップロードのシーケンス図](/5fd8424f2271ae00481ed2e8.md)
  - [ファイルアップロード設定](/5f55a6af28951e0048d61398.md)
  - [プレゼンテーション](/63ea366fdc96eb0ef7657f53.md)
  - [ページ&ユーザーグループv5](/61b2cdd6aa330ce7d8152a4e.md)
  - [ページの子孫数](/62ac00a1c395c23b7a8c86dc.md)
  - [ページの移動・リネーム](/62149d019311629d4ecd91cf.md)
  - [ページ同時編集時のコンフリクト解消に関する仕様](/615d4a77c0ac5081f05d9d57.md)
  - [ログイン時の挙動](/63eee058c9d7133b414ba205.md)
  - [ワークフロー機能](/64e6b3d5e28cb1aa7ee4197f.md)
  - [検索v5](/61975a974027a1fa01947059.md)
  - [検索結果ページのコメント表示](/621caadad9a9f09266ad21c3.md)
  - [権限修正が可能なページのアラート](/626a263645af0b779a282145.md)
  - [空ページ](/62b2f5b3f442e6078d890a8b.md)
- Last updated: 2019-06-03T04:13:05.584Z by mizozobu
- Full page listing (all children regardless of count): https://dev.growi.org/_api/v3/page-listing/children?id=5cf494d4aa8c91003eb0b481
