Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
DelphiRAD Studioニュース

Sqids: RAD Serverとの統合およびスタンドアロンライブラリ

squid

RAD Studio 12 ではSqidsライブラリを利用できるようになりました。これによってあらゆるプラットフォームでネイティブかつ超高速な Sqids アルゴリズムを使用して、数値や数値の配列をエンコードおよびデコードできるようになりました。それだけでなく、Sqidsは標準化されているため、他のプログラミング言語とも完全に互換性があります。利用可能な言語については、SpidsのWebサイトをチェックしてください。

TSqidsEncodingの使用方法

System.NetEncoding.Sqidsをコード内に定義し、新しいオブジェクトを初期化するだけです。カスタマイズしたアルファベットと長さを使用することをお勧めします。そうすることで、IDの解読がより困難になります。

それでは、簡単な例を見てみましょう。

procedure CreateSqids;
begin
  var length := 10;
  var alphabet := 'JXx6Ue7jLqBk9cZmwA2szgdYNRP4lhOErDvQF1GTVIM3fao5t8WuSb0HyipKnC';
  var sqids := TSqidsEncoding.Create(alphabet, length);
  var encoded := sqids.Encode(1034); // The encoded value will be '6GRy4cbTSV'
  var decodedSingle := sqids.DecodeSingle(encoded); // The decoded value will be an integer with the value: 1034
  var decoded := sqids.Decode(encoded); // The decoded value will be and array with one value: 1034
  lSqids.Free;
end;

Sqidsを使用すると、数値または数値の配列を、指定された文字と長さを使用するYouTubeのような文字列にすばやくエンコードできます。TSqidEncodingには他にも複数のメソッドがあり、より柔軟な使い方ができますが、概念的には非常に簡単でシンプルです。

RAD Serverとの統合

RAD Server には、Sqids を簡単に利用できるようにする統合機能があります。TEMSDatasetResource を使用して、属性内で ID の前に記号 # を指定するだけで、あとの作業はRAD Server が行います。

顧客向けにエンドポイントを公開しており、例えば、主キー(CUST_NO)を持つSqidsを使用したいとします。その場合、単純に以下のコードのように記述するだけです。

  [ResourceName('Customers')]
  TCustomersResource = class(TDataModule)
    qryCustomers: TFDQuery;
    [ResourceSuffix('list', '/')]
    [ResourceSuffix('get', '/{#CUST_NO}')]
    [ResourceSuffix('put', '/{#CUST_NO}')]
    [ResourceSuffix('post', '/')]
    [ResourceSuffix('delete', '/{#CUST_NO}')]
    resCustomers: TEMSDataSetResource;
    FDConnection1: TFDConnection;
  end;

RAD Server は URI レベルでしかデコードを行わないため、レスポンスの本文はエンコードされないことを理解しておくことが重要です。RAD Studio でクライアント アプリケーションを開発している場合は、EMSProvider コンポーネントでアルファベットと長さのプロパティを定義することで、リクエストも自動的にエンコードされます。(ページの最後にあるデモプロジェクトを確認してください)。

RAD Server が使用するアルファベットと長さをカスタマイズするには、EMSServer.ini に 2 つの新しいプロパティがあります。

[Server.Sqids]
;# The following options control URL parameters Sqids decoding
;#
;# Optional alphabet for Sqids decoding
Alphabet=
;# Optional minimal hash length for Sqids decoding
MinHashLength=0

Sqid はどのような状況で使用すれば良いのですか?

REST APIを開発する場合、あるいは複数のサービスが相互に通信する必要がある場合、エンドポイントのIDをあまり公開したくないかもしれません。ただほとんどの場合、エンドポイントのIDはテーブルの主キーであり、これらのエンドポイントはボットを使用してデータを収集する有力な候補となります。またセキュリティ上の潜在的な問題を最小化するためにもIDは有効です。例えば、エンドポイントの1つが不具合によって適切に保護されていないケースを考えてみましょう。インクリメンタルな数字のIDを使用することで、利用できないデータへのアクセスが容易になります。IDを難読化する理由は複数ありますが、Sqidsを使用すれば、非常に簡単かつ迅速に難読化できます。

Sqidsの利用は安全ですか?

Sqidsアルゴリズムの特徴は、非常に高速であることです。ただし、Sqidsは暗号化メカニズムではなく、クレジットカードや暗証番号などの機密データを暗号化する方法としては推奨されない点について理解しておくことが重要です。Sqidsは、難読化によるセキュリティというアプローチに従っていますが、数値IDのような単純なデータの解読をしにくくするだけで、十分な時間と忍耐力があれば、最終的にIDを解読できてしまうでしょう。

Sqidsのサンプルプログラムはありますか?

GitHubに2つのプロジェクトを用意いたしました。

Sqids Playground

サンプルプロジェクトのダウンロード: https://github.com/azapater/sqids-playground

sqidsplayground_9pwi0evuwi-1482109-2

1つ目のプロジェクトは、FireMonkeyアプリケーションで使用可能な複数のパラメータを操作して、結果をリアルタイムで確認できます。デフォルトの “Results “タブでは、MemTableに1000行が作成され、そのエンコード速度を見ることができます。さらに2つのタブがあり、選択したアルファベットと長さに基づいてエンコードとデコードをカスタマイズできます。ボタンを押して楽しんでください!

RAD Server integration

サンプルプロジェクトのダウンロード: https://github.com/azapater/sqids-radserver

vclsqids_0boqwfjpsd-1694966-2

2つ目のプロジェクトは、RADServerとVCLアプリケーションを含むProjectGroupです。コードを分析すると、RAD Server との通信で Sqids がどのように実装されているか、またID を自動的にエンコードおよびデコードする方法が理解できます。このプロジェクトはデータベースに接続されているため、FDConnection で InterBase で利用可能なサンプル employee.gdb データベースを定義する必要があります。

参考情報

またRAD Serverをこれから利用したいという方は、その最初のステップとして「RAD Serverテクニカルガイド」をダウンロードし、ご活用ください。

RAD Studio 13.2 Florence Now Available! Kai 1.1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES