deta.spaceでAPIを作成する

# はじめに
今回は、detaを使ってAPIを作成していきたいと思います。
Herokuの代替サービスとしてました。だいぶ使用が変わっているのか、いい資料がなかったので書かせてもらいます。
参考にしていただければ幸いです。また、間違っている部分があれば、ぜひご指摘ください！


# サインアップ
https://deta.space/signup

こちらへアクセスしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/a9930ce6-e11c-539b-9c93-bd86e6b04075.png)

1. Usernameを入力
1. Emailを入力
1. Passwordを入力
   必須条件が以下の三つあります。
   - 番号が含まれいていること
   - 特殊文字が含まれていること
   - 大文字と小文字が含まれていること
1. Enable　Developer Modeをオンにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/c485be20-4bd1-11ba-f206-fdf42a3ee41b.png)
1. Begin your journey をクリック
1. 認証用のメールが届くので、`Verify Email`をクリック
1. サインインをする
1. 以下の画面になるまで進める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/3127c787-bd39-13d0-210d-bfd9ebd767e7.png)


# AccessTokenの発行
1. ウィンドウ下部にある`Type a command or search`をクリックして`Settings`と入力してEnter
1. このような画面が出てくるので、`Generate Token`をクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/13fb6621-9c2f-e486-b166-f4e8548b1b5e.png)
1. `Your new token:`がAccess Tokenになります。後で使うので、どこかへコピペしておいてください。
:::note alert
`⚠️ The token will not be shown to you again, store it somewhere safe!`と書いてある通りAccess Tokenはこの画面を離れたら再度見ることはできないので注意‼
:::


# CLIのインストール
OSによってコマンドが違います。
### windows
~~~ powershell:PowerShell
iwr https://get.deta.dev/space-cli.ps1 -useb | iex
~~~

### MacOS/Linux
~~~ sh:Terminal 
curl -fsSL https://get.deta.dev/space-cli.sh | sh
~~~


# ログイン

こちらは、どのOSも共通です。
~~~ powershell:Terminal
space login
~~~


# アプリの作成
1. 以下を実行
    ~~~ powershell:Terminal
    space new
    ~~~

1. プロジェクト名を入力
   ~~~
    ? What is your project's name? >
    ~~~
    フォルダ名でOKな場合はそのままEnterを押す



# 適当なAPIアプリの作成
Fastapiを使用して簡単なAPIアプリを作ります。
#### ファイル構成
~~~
  
│  .gitignore
│  Spacefile
│
├─.space
│      meta
│      README
│
└─api
        main.py
        requirements.txt
~~~

#### main.pyの中身
~~~ python: main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}
~~~

#### requirements.txtの中身
~~~ : requirements.txt
fastapi
~~~


### 参考
##### FastAPI
https://fastapi.tiangolo.com/ja/


# 構成の記述

#### Spacefileの中身
~~~ : Spacefile
v: 0
micros:
  - name: simple-api
    src: ./api
    engine: python3.9

~~~
詳しい書き方についてはこちらを参照
https://deta.space/docs/en/basics/micros#whats-a-micro

# デプロイ
detaでは、デプロイではなくpushというらしいですね…

以下を実行
~~~ sh: Terminal
space push
~~~
最後のほうに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/e2bef882-e002-3924-3a24-a23cd0cf30ee.png)
とでたら、成功です‼
そのすぐあとに記載されている、URLを踏むと、こんな感じで動いていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/2a8cb4a7-2168-895b-ce91-789b9b449f75.png)


このページのURLの後に`/docs`を付けることでFastAPIのドキュメントページも見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244335/ade4985f-9863-3427-c042-8514027d0144.png)

# おわりに
アプリのデプロイまで数分で使えるので、とても便利ですね。
応答速度等は無料で使えるものなのでほかに劣るかもしれませんが、無料でいろいろできるので、学生にはいいですね。


# 参考にした記事
https://qiita.com/rana_kualu/items/f7fc4916b7dc9797839e

https://qiita.com/namachan/items/b8c1ee89dc091d656d4f

https://fastapi.tiangolo.com/ja/deployment/deta/