先寫 API 文件。
可以使用mockAPI的服務取得一組 user 的 API。
GET /userresponse 200
{
  "data": [
    {
      "createdAt": "2021-09-28T06:15:33.861Z",
      "name": "chris",
      "avatar": "https://fakeimg.pl/300/",
      "id": "1"
    },
    {
      "createdAt": "2021-09-28T08:06:09.227Z",
      "name": "Elizabeth Shields",
      "avatar": "https://cdn.fakercloud.com/avatars/russoedu_128.jpg",
      "id": "2"
    },
    {
      "createdAt": "2021-09-27T16:50:44.188Z",
      "name": "Everett Stokes",
      "avatar": "https://cdn.fakercloud.com/avatars/bobwassermann_128.jpg",
      "id": "3"
    }
  ]
}
GET /user/:idresponse 200
{
  "data": {
    "createdAt": "2021-09-28T06:15:33.861Z",
    "name": "chris",
    "avatar": "https://fakeimg.pl/300/",
    "id": "1"
  }
}
POST /userrequest body
{
  "name": "chris",
  "avatar": "https://fakeimg.pl/300/"
}
response 200
{
  "data": {
    "createdAt": "2021-09-28T01:16:41.617Z",
    "name": "chris",
    "avatar": "https://fakeimg.pl/300/",
    "id": "4"
  }
}
PUT /user/:idrequest body
{
  "name": "chris",
  "avatar": "https://fakeimg.pl/300/"
}
response 200
{
  "data": {
    "createdAt": "2021-09-28T06:15:33.861Z",
    "name": "chris",
    "avatar": "https://fakeimg.pl/300/",
    "id": "1"
  }
}
DELETE /user/:idresponse 200
{
  "data": {
    "createdAt": "2021-09-28T06:15:33.861Z",
    "name": "chris",
    "avatar": "https://fakeimg.pl/300/",
    "id": "1"
  }
}
前幾天的 Vuex使用偏好 有說 action 可以寫非同步行為,還有它的命名規則。在此就利用這些原則,配合上一篇的基礎建設,在這裡「將 API 文件寫成程式碼」,成為「程式碼可以自我文件化」的一種體現。
@/store/actions.js
import backendAPI from '@/utility/backendAPI.js'
export default {
    async fetchUser ({ commit }, id) {
      const res = await backendAPI.GET(`/user/${id}`)
      commit('user', res.data)
    },
    async fetchUsers ({ commit }, id) {
      const res = await backendAPI.GET(`/user`)
      commit('users', res.data)
    },
    async createUser ({ commit }, { id, name, phone }) {
      await backendAPI.POST(`/user`, {
        name,
        avatar
      })
    },
    async updateUser ({ commit }, { id, name, phone }) {
      await backendAPI.PUT(`/user/${id}`, {
        name,
        avatar
      })
    },
    async deleteUser ({ commit }, id) {
      await backendAPI.DELETE(`/user/${id}`)
    },
  }
其中,這些部份,就如同你的 API Doc 在除錯的時候,可以直接搜尋 path 並且對一下 method 和 param 有沒有給錯。這裡和 API Doc 一樣,API 會給錯,都是 component 的問題了。
backendAPI.GET(`/user/${id}`)
backendAPI.GET(`/user`)
backendAPI.POST(`/user`, {
  name,
  avatar
})
backendAPI.PUT(`/user/${id}`, {
  name,
  avatar
})
backendAPI.DELETE(`/user/${id}`)
為了讓在這裡的 res (在 fetchUser、fetchUsers 有宣告) 就如同下圖的樣子,所以需要前一篇的處理 API 層次感之地基篇,讓 response 吐出來的樣子,和瀏覽器的 Network 看到的一樣。

目前我們實作了下面這一個部份

接下來,慢慢的將 Vuex 把這些東西都做好。