---
# System prepended metadata

title: 'Hands-on: Manage self hosted API through APIM'
tags: [App Service, Workshop, API Management]

---

###### tags: `Workshop` `App Service` `API Management`
# Hands-on: Manage self hosted API through APIM

## #1 建立 RESTful API 並部屬至 Azure 環境
**以下步驟參考此份教學文章並使用範例程式碼 [教學課程：裝載具有 CORS 的 RESTful API - Azure App Service | Microsoft Docs](https://docs.microsoft.com/zh-tw/azure/app-service/app-service-web-tutorial-rest-api)**

- 下載範例程式(ASP.NET Core)
    ```
    git clone https://github.com/Azure-Samples/dotnet-core-api
    ```
- 測試API執行於local
    ```
    cd dotnet-core-api
    dotnet restore
    dotnet run
    ```
    * 至瀏覽器輸入 http://localhost:5000/api/Todo 會回傳 TODO 的紀錄
      ```
      [{"id":1,"name":"Item1","isComplete":false}]
      ```
   * 或是使用以下指令
      ```
      curl http://localhost:5000/api/Todo
      ```
   * 查看所有的API http://localhost:5000/swagger
    ![](https://i.imgur.com/n2D0w1j.png)

- 設定部屬資訊
    - username 在 Azure 服務及 local Git push 中都必須是唯一的，且不能包含 ‘@’ 符號
    - 密碼長度必須至少為 8 個字元，包含下列三個元素其中兩個：字母、數字及符號
    ```
    az webapp deployment user set --user-name <username> --password <password>
    ```
    - JSON 輸出會將密碼顯示為 `null`
    - 若顯示 `'Conflict'. Details: 409`，請變更使用者名稱
    - 若顯示 `'Bad Request'. Details: 400`，請使用更強的密碼

- 建立資源群組
    ```
    az group create --name <resource-group-name> --location "Southeast Asia"
    ```
- 建立應用程式服務方案
    ```
    az appservice plan create --name <app-service-plan-name> --resource-group <resource-group-name> --sku FREE
    ```
- 建立 Web 應用程式
    ```
    az webapp create --resource-group <resource-group-name> --plan <app-service-plan-name> --name <app-service-name> --deployment-local-git
    ```

    * 建立完成後會顯示以下資訊，並記錄下來

        >Local git is configured with url of 'https://<username>@<app-service-name>.scm.azurewebsites.net/<app-service-name>.git'


- 將 local 的 API 部屬至 Azure 環境中
    ```
    git remote add azure https://<username>@<app-service-name>.scm.azurewebsites.net/<app-service-name>.git

- 如無法成功部屬請參考：https://docs.microsoft.com/zh-tw/azure/app-service/deploy-local-git#configure-a-deployment-user

- 確認是否添加
```
git remote -v
```
- 部屬
```
git push azure master
```

## #2 建立 API Management
**以下步驟參考此份教學文章[使用 Azure 入口網站匯入 API 應用程式作為 API | Microsoft Docs](https://docs.microsoft.com/zh-tw/azure/api-management/import-api-app-as-api)**
- 在 [Azure Portal](https://portal.azure.com/#home) 上建立 API Management
- 選擇剛剛建立的 API Management，API > Blank API，並填入已建立好的 API url
![](https://i.imgur.com/UqUOX7q.png)
![](https://i.imgur.com/L5UzToo.png)
- 設定相關參數，選擇上步驟的API > Add operation，在 Web service URL 填入 `/Todo` 
![](https://i.imgur.com/wdhVl1O.png)
- 另外建立一個 POST 用來新增 Todo list 的資料
![](https://i.imgur.com/dW3JBdC.png)
- 取得 API Subscription Key
![](https://i.imgur.com/JG5skO2.png)

- 可以使用 Test 進行測試或透過 Postman 測試
- 將現有的API加入到產品中：[教學課程：建立和發行產品](https://docs.microsoft.com/zh-tw/azure/api-management/api-management-howto-add-products)


## #3 其他補充資料
- 如果想要透過 ASP.NET Core自建API
[教學課程：使用 ASP.NET Core 建立 web API | Microsoft Docs](https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio-code)
- 更多練習Lab
    [Deploy a website to Azure with Azure App Service](https://docs.microsoft.com/en-us/learn/paths/deploy-a-website-with-azure-app-service/) 
