SwiftでのソーシャルメディアURLの検証

May 09 2022
背景2022年のバレンタインデーに、TokopediaはすべてのTokopediaユーザーと一般の人々にアフィリエイトプログラムを導入しました。アフィリエイトになるには、ユーザーはURLを使用してソーシャルメディアアカウントを登録する必要があります。
UnsplashのThomMilkovicによる写真

バックグラウンド

2022年のバレンタインデーに、TokopediaはすべてのTokopediaユーザーと一般の人々にアフィリエイトプログラムを導入しました。アフィリエイトになるには、ユーザーはURLを使用してソーシャルメディアアカウントを登録する必要があります。各ソーシャルメディアURLには異なるドメインとURLパスがあるため、アプリケーションはソーシャルメディアに従ってURLを検証する必要があります。

正規表現は多くの構文解析の問題を解決する最も簡単な方法の1つであることに同意しますが、このケースはソーシャルメディアごとにいくつかのルールがあるため複雑であり、将来的にカスタマイズするのは困難になります。一部のソーシャルメディアには、ユーザーページに複数のURLパスがあります。たとえば、YouTubeには次のようないくつかのパスがあります。

https://www.youtube.com/user/example
https://www.youtube.com/c/coldplay
https://www.youtube.com/channel/UC9zY...

SuperValidator

SuperValidatorは、オプションベースのバリデーターであり、TokopediaのiOSエンジニアが管理するオープンソースライブラリです。バリデーターは、ニーズに応じて検証をカスタマイズするためのオプションを提供します。詳細については、この記事をご覧ください。

URLバリデーター

URLの構造を見ると、URLのコンポーネントごとに個別の検証を作成できます。

SuperValidatorは、コンポーネントを次のようなパラメーターとして分割しました。

protocols: [String] = ["https", "http", "ftp"],
requireProtocol: Bool = false,
requireValidProtocol: Bool = true,
paths: [String] = [],
allowQueryComponents: Bool = true,
domainWhitelist: [String] = [],
domainBlacklist: [String] = [],
fqdn: FQDN = .init() // Fully Qualified Domain Name

httpまたはなどの有効なプロトコルの文字列の配列https。保存する場合httpsは、のみ許可されますhttps

requireProtocol

trueに設定されている場合、URLにはプロトコルが必要です。

requireValidProtocol

trueに設定されている場合、URLプロトコルは、プロトコルオプションにリストされている有効なプロトコルの1つと同じである必要があります。

パス

URLパスの文字列の配列/shop/{shopID}
2種類fixedありvalueます。

/shop/{shopID}

allowQueryComponents

falseに設定すると、クエリコンポーネントとアンカーは許可されません。

domainWhitelist

ホワイトリストドメインの文字列の配列。正規表現も使用できます。

domainBlacklist

ブラックリストドメインの文字列の配列。正規表現も使用できます。

FQDN

Fully Qualified Domain Nameの略で、ドメインが正常に機能するかどうかを確認します。

基本的な使用法

関数を呼び出すだけisURLで、有効なURLを示すブール値を返すことができます。

バリデーターをカスタマイズする場合は、前のセクションで説明したオプションパラメーターを次のように設定できます。

関数を使用validateURLして、成功またはエラーの結果を返すこともできます。SuperValidatorが提供するエラータイプを使用して、エラーメッセージを生成できます。

ユースケース

ソーシャルメディアのユーザーURLを分類してみましょう。それらには異なるドメインとパスがあり、それらのいくつかには複数の有効なパスがあります。このようなケースは、他のURLでも発生する可能性があります。enumすべてのソーシャルメディアのオプションを保存するためのを作成できます。

次に、SuperValidatorを使用isURLまたは機能させることができます。validateURL

SuperValidator.shared.isURL(
   "https://instagram.com/myuser", 
   options: SocialMediaURL.instagram.options
)

validateURLエラーの理由を取得してユーザーに提供するために使用できます。

その他のテストケースについては、このリンクを参照してください。

その他のバリデーター

URLの他に、SuperValidatorがすでにカバーしているいくつかのバリデーターがあります。

FQDN

完全修飾ドメイン名の検証に役立ちます。(ウィキペディア)

Eメール

ローカルパーツの長さ制限、ホワイトリスト、ブラックリストドメインなどのオプションを使用して、電子メールの検証を支援します。

電話番号

国際、北米、および拡張プロビジョニングプロトコル形式で電話番号を検証し、国コードまたは国のプレフィックスを検証するのに役立ちます。

今後の計画

  • より多くの検証者
  • UITextFieldでバインドする
  • RxSwiftでバインドする

寄稿者を呼ぶ!SuperValidatorはオープンソースであり、皆様からのご意見をお待ちしております。あなたの経験は、SuperValidatorを使用する他の人に利益をもたらします。それをさらに良くしましょう!

https://github.com/tokopedia/ios-supervalidator

クレジット

開発を手伝ってくれたクリストファー・テディに感謝します。スーパーマンチームとこれを実現するのを助けたすべての開発者に称賛を送ります。

いつものように、Tokopediaにオープニングがあります。
私たちはインドネシアのテクノロジー企業であり、テクノロジーを通じて商取引を民主化し、誰もがより多くのことを達成できるよう支援することを使命としています。
Tokopediaで私たちと一緒にあなたの夢の仕事を見つけてください!
https://www.tokopedia.com/careers/

© Copyright 2021 - 2023 | hachiwiki.com | All Rights Reserved