最終更新日:2020-06-17
こんにちは。最近は全くブログを更新していませんでした。
今回は、最近作成したURL短縮サービスのAPIの紹介をします。
このAPIを利用して作ったURL短縮サイトはこちらです→dai.gd
このAPIは、RESTというメジャーなAPIの仕様に基づき作成しました。
そのため、同じURLでも、HTTPのメソッドが異なると違う操作がサーバー内で行われることになります。
つまり、URLは行う操作とは関係がなく、”何に対して”操作を行うのかという部分のみを示すのです。そして、”どのような操作をするのか”という部分はHTTPのメソッドで表すことになります。
今回のURL短縮APIを例に取ると、同じ”/shortUrls”というURLでも、HTTPのPOSTを利用してAPIを叩くと、新しい短縮URLが作成され、GETを利用してAPIを叩くと短縮URLに紐付いた元のURLが返ってくるというような感じです。
単にURL短縮サイトを利用したいだけであれば、dai.gdのサイトをご利用ください。ここでは、APIの利用方法を説明します。
前提:ホスト名は https://api.dai.gd/ です。
①短縮URLを作成したい場合
/shortUrls にPOSTメソッドでリクエストを送ってください。
このとき、リクエストボディーには、JSON形式で、
{url:”https://www.dai-blockchain.tech”}
のように、urlというフィールドに短縮したいURLを入力してください。
正常に短縮URLが作成された場合、URLと、URLからhttps://dai.gd/を除いたid(下記のGETメソッドで利用)と、成功したことを表すメッセージが返ってきます。
②短縮URLから元のURLを知りたいとき
/shortUrls にGETメソッドでリクエストを送ってください。
このとき、クエリストリングのidパラメーターに、短縮URLのhttps://dai.gd/を除いた部分(https://dai.gd/Ms7FuItUd が短縮URLであれば、idパラメータはMs7FuItUd)を含めてください。
例: shortUrls?id=Ms7FuItUd
正常に短縮URLに紐付いた元のURLが見つかった場合、元のURLが返ってきます。
①: Bad Request.Please include the URL you want to shorten in the request body.
説明:POSTメソッドで新しい短縮URLを作ろうとした際、bodyのurlフィールドに短縮したいURLが含まれていなかったことを意味します。
解決策:URLを含んで再度リクエストを送ってください。
②Bad Request. Invalid URL.
説明:POSTメソッドで新しい短縮URLを作ろうとした際、bodyのurlフィールドに存在するURLの形式が正しくなかったことを意味します。
解決策:URLの形式を確認してください。
③Bad Request. Please include the ID in the query.
説明:GETメソッドで短縮URLに紐付いた元のURLを取得しようとした際、クエリストリングのidパラメーターが存在しなかったことを意味します。
解決策:idパラメーターに短縮URLのID(短縮URLからhttps://dai.gd/ を覗いた部分)を含めてください。
④No URL was found that matches the ID you were looking for.
説明:GETメソッドで短縮URLに紐付いた元のURLを取得しようとした際、該当するIDに紐付いたURLが見つからなかったことを意味します。
解決策:正しいIDがクエリストリングのidパラメーターに含まれているかを確認してください。同じ文字でも大文字と小文字は区別されます。
また、数字の0とアルファベットのOや、数字の1とアルファベットの
l(エル)とアルファベットの大文字のI(アイ)等は特に間違えやすいので、それらも確認してください。
⑤Method Not Allowed,Only GET and POST can be used.
説明:サーバーがGET・POST以外のメソッドでリクエストを受けたことを意味します。V1ではGET・POST以外のメソッドを利用することはできません。
解決策:用途に応じて、GETもしくはPOSTを利用してリクエストを行ってください。
dai.gdのサイトを制作するのにはNext.jsを用い、ホスティングにはnowを使用しています。
また、短縮URLのIDと元のURLはCloud Firestoreに保存しています。
APIはNode.jsで書いており、APIのデプロイにはCloud Functionsを利用しています。また、カスタムドメインとの紐付けのため、Firebase Hostingも利用してます。
このように、このサービスは一切サーバーを持たないサーバーレスの設計となっています。サーバーレスのプラットフォームは初期費用を抑えられ、なおかつ面倒な設定もなく使えるものが多いので、使ってみてはいかがでしょうか。
お読みいただきありがとうございます。
Vercel
NextJS
Firebase