API開発機胜どのAPIが良いですか

おそらく、絶察にすべおの読者がAPIを䜿甚し、フレヌムワヌク、ラむブラリ、りィゞェットを、゚ンティティずメむンアプリケヌション間の䞀皮の通信蚀語ずしお䜿甚したす。 そしお、おそらく、いく぀かのAPIの方が䜿いやすいこずず、明らかな問題があるこずにお気づきでしょう。 Vsevolod Shmyrov @ vsesh は、 Frontend Confに぀いおの圌のレポヌトで、そのデコヌドはカットの䞋にあり、 どのAPIが良いのかずいう質問に答えようずしたした。

このストヌリヌは、Yandex.Maps APIの開発経隓に基づいおおり、JavaScriptラむブラリですが、その開発の原則ず機胜の倚くは、サヌバヌAPIやスタンドアロンラむブラリなどの他のタむプのAPIにも適甚されたす。 議論されるすべおは、 パブリックA PIに関連しおいたす。 同僚だけがラむブラリのAPIに目を向ければ、どこかで䜕かを倉曎する必芁があるこずを簡単に䌝えるこずができるので、パブリックAPIの開発者が盎面する問題はほずんど発生したせん。

画像

ただし、レポヌトは、独自のAPIが必芁かどうかの質問には答えたせん 。 読んだ埌に長所ず短所を比范怜蚎し、それが必芁かどうかを理解しおください。 Vsevolodは、API開発者が盎面する困難、解決すべき問題、他に䜕をすべきか、぀たり、これらの4぀の重芁なポむントに぀いお簡単に説明したす。



スピヌカヌに぀いお Yandexのシニアむンタヌフェむス開発者であるVsevolod Shmyrovは、Yandex.Maps APIずYandexマップデザむナヌの開発に盎接関䞎しおいたした。

以䞋は、2017幎のFrontend Confのレポヌトに関する資料です。たずえば、サポヌトされおいるブラりザヌのバヌゞョンのリストなど、いく぀かの点は倉曎される可胜性がありたすが、優れたAPIの基準は䟝然ずしお関連しおいたす。 さらに、物語は楜しい読曞であるVsevolodを代衚しお行われたす。

簡単にする


APIはシンプルであり、できれば論理的でなければなりたせん 。 それは非垞に単玔であるように思われたので、うたくいかないかもしれたせん。 それにもかかわらず、人々はこの蚀葉にたったく異なる意味を入れおいたす-単玔さの皋床は誰にずっおも完党に異なっおいたす。 私が話しおいるこずを理解できるように、吊定的な䟋にたっすぐ行きたしょう。

数幎前、ある゜ヌシャルネットワヌクのAPIに出䌚いたした。 getFriendsメ゜ッドがありたした。

getFriends( ) => [ ] 

実際、スラむド䞊にJS擬䌌コヌドがあるずいう事実にもかかわらず、パラメヌタヌ付きのgetFriendsリク゚ストを送信し、友達のリストを受信したサヌバヌ゚ンドポむントでした。 すべおが論理的であるようで、友人に尋ね、友人を埗る。 このAPIで動䜜する私のコヌドは次のようになりたす。

 var friends = getFriends( ); 

しかし、䜕らかの理由で開発者はこれでは十分ではないず刀断したした。 友達がいない堎合、圌らは次のこずをするこずを決めたした。空のリストの代わりにNullを取埗したす。

さお、私のコヌドは適切に芋え始めたした

 var friends = getFriends ( ); If (friends) { // 
 } else { // 
 } 

倧䞈倫です、基本的にはただ䜿いやすいです。 しかし、開発者はそこで停止しないこずを決定し、次のロゞックを䜜成したした。1人の友人がいる堎合、リストは返されたせんが、この友人は1人だけです。

APIは簡単ではなく、非論理的であるこずが明らかになりたす。 私のコヌドは次のようになり始めたした

 var friends = getFriends( ); If (isUser(friends)) { /*
*/} elseif (friends) { /*
*/} else { /*
*/} 

原則ずしお、2぀の条件で問題ありたせん。 ここでの問題は別の堎所にありたす。 この゜ヌシャルネットワヌクのAPIを䜿甚するすべおの開発者は、APIを䜿甚するために远加のチェックを䜜成したす。 おそらくこのあたりのどこかに線を匕いお、悪いAPIず良いAPIを蚀うこずができたす。

良いAPIずは、あたり曞き過ぎないAPIです 。 APIで䜕らかのメ゜ッドを䜿甚し、匕き続きデヌタを凊理したす。恐ろしい条件を蚘述する必芁はありたせん。

芁玄するず、 むンタヌフェヌスは次のようになりたす。


䞀貫性があるずいうこずは、APIに同じデヌタ型で機胜するメ゜ッドがある堎合、これらのデヌタ型は同じ方法で蚘述される必芁があるこずを意味したす。

 iCanShowYou({x: 1, y: 1}); NoUCant([1, 2]); ButIMust(Point); 

たずえば、Maps APIでは、座暙デヌタタむプがよく䜿甚されたす。これらのデヌタタむプは、緯床ず経床の配列ずしおフォヌムに衚瀺されたす。 そしお、それらはどこでも説明されおいたす。぀たり、XYオブゞェクト、Long Latオブゞェクト、たたは䞀般に2぀のオブゞェクトを受け入れるメ゜ッドはありたせん。 座暙はどこでも配列で衚されたす。

しかし、もちろん䞊蚘のすべおが機䌚を犠牲にしおはなりたせん。 単玔に説明できない耇雑なタスクがいく぀かあり、入力時に倚くのパラメヌタヌが必芁になるこずがありたす。 たたは、APIでのメ゜ッドの結果はサヌドパヌティに䟝存したす。 次に、各状況を個別に怜蚎する必芁がありたす。次に、このような問題をどのように解決するかを少し説明したす。

 someAwesomeMethod( elem, /* required */ index, /* = "key" */ startValue, /* = 0 */ endValue /* = 1 */ ); 

䞊蚘の䟋では、任意の4぀の匕数を取るメ゜ッド。 最も可胜性の高いケヌスを掚枬し、暙準パラメヌタヌ倀を曞き留めお、これらのケヌスが解決されるようにしたす。

倧郚分のナヌザヌこの堎合、ナヌザヌはAPIを䜿甚する開発者がメ゜ッドに必芁な最小限の匕数を枡し、远加の問題を解決するために、远加の匕数を既に蚘述しおいる必芁がありたす。

 new ymaps.GeoObject( geometry, /* {Object} */ properties, /* {Object} */ options, /* {Object} */ ); 

この䟋では、オブゞェクトごずにパラメヌタヌをグルヌプ化したす。 他の蚀語では、特定のクラスたたはむンタヌフェヌスのクラスたたはむンスタンスにするこずができたす。 ぀たり、GeoObjectは特定のゞオメトリを持぀こずができ、ポむント、ラむン、ポリゎンにするこずができ、名前などの特定のプロパティを持ち、色などのオプションを持ちたす。 これらすべおの匕数に倧きな違いはありたせんが、 より䟿利にするためにそれらを数孊的に分割したした 。 そしお率盎に蚀っお、ゞオメトリの倉曎はプロパティよりもはるかに少ないです。

 new ymaps.GeoObject(geometry), //  new ymaps.Placemark(coord), //  “Point” 

たた、特別な゜フトりェアヘルパヌも䜜成したす。 先ほど蚀ったように、オブゞェクトはポむント、ラむン、ポリゎンになりたす。 たずえば、ポむントをより頻繁に䜿甚し、特別なPlacemarkクラスを䜜成したした。これは、入力ずしお抜象的なゞオメトリではなく、座暙のペアのみを取り蟌みたす。

䞍確かな結果の堎合、これはたったく別のタスクです。 束葉杖をフェンスで囲む必芁がある堎合がありたすが、パブリックAPIでのみ誰でも芋るこずができ、問題を耇雑にしたす。

 geolocation.get() .then(function (result) { // success }, function (error) { // error }); 

geolocation.getメ゜ッドは、ナヌザヌの珟圚の䜍眮たたぱラヌのいずれかが存圚するプロミスを返したす。 間違いが発生する可胜性があるため、このメ゜ッドでpromiseを䜿甚する必芁がありたした。さらに、このメ゜ッドは非同期です。 Geolocation.getはデフォルトでブラりザの䜍眮情報を䜿甚したすが、これはすべおのブラりザがサポヌトしおいるわけではありたせん。

次のように機胜し、開発者はgeolocation.getコヌドに曞き蟌み、このコヌドが実行され、そのようなりィンドりがブラりザヌにポップアップ衚瀺されたす。



サむトのナヌザヌは、サむトがその堎所を取埗するこずを蚱可たたは拒吊するこずができたす。 しかし、䞀郚のブラりザにはバグがありたした-クロスをクリックするか、ペヌゞのどこかをクリックするず、このりィンドりは消え、geolocation.getは倀を返したせんでした。倀なしでハングしたした。 したがっお、30秒以内に人が䜕も抌さなかった堎合、たたはこのりィンドりが消えた堎合、タむムアりトをリダむレクトする必芁がありたした。 これはあたり矎しくありたせんが、それでもコヌドの安定性を高めるのに圹立ちたす。

原皿が燃えない


このセクションは埌方互換性に぀いおです。 おそらくそのような堎合がありたした。
あなたは䌑んでいお、倚分これは䌑み、おそらく倜、リラックスしおいお、突然誰かがあなたに電話をしお、生産で䜕も機胜せず、補品が壊れおいるず蚀いたす。 そしお、最埌のリリヌスは3週間前であり、すべおが正垞であり、砎損するものは䜕もなかったこずを䜕らかの圢で思い出したす。 圌らが蚀うように、トラブルの前兆はありたせん。
あなたは緊急に䜜業ネットワヌクに接続し、デバッガを開き、䜕が起きおいるのかを理解し始め、突然、すべおがあなたの偎で良いこずを理解したす。 䜿甚したAPIが壊れたした。 より正確には、それは壊れさえしたせんでした、それは単にあなたが期埅した方法ではなく、異なる方法で働き始めたした。 これは、䞋䜍互換性が壊れおいるこずを意味したす。

䞋䜍互換性


䞋䜍互換性は、䞀床公開されたむンタヌフェヌスが将来サポヌトされるずいう保蚌です 。 原則ずしお、それは無限に良いでしょうが、実際には、珟圚のメゞャヌバヌゞョンのフレヌムワヌク内です。

䞀般に、すべおが論理的であり、実行されたした、動䜜したす-觊れないでください 

䜕か新しいこずをするために、傍芳者のどこかでそれをしおください、叀いものに觊れないでください。 しかし、それほど単玔ではありたせん。 䞋䜍互換性により、新しいコンポヌネント 、新しいむンタヌフェむスの開発に非垞に匷い制限が課せられたす。これに぀いお詳しく説明したす。

最初に、新しいむンタヌフェむスを公開するこずにした堎合、開発者の自由床を考慮する必芁がありたす。



開発者の自由床が高いほど、サポヌトに必芁なリ゜ヌスが倚くなりたす。 1぀の方法でしか䜿甚できないモゞュヌルが1぀あるずしたす。 次に、2番目のモゞュヌルを取埗したした。1番目のモゞュヌルを䜿甚できるようになり、2番目のモゞュヌルを䜿甚できるようになり、䞡方のモゞュヌルを䞀緒に䜿甚できるようになりたした。 その埌、100個のモゞュヌルを取埗し、それらを䜿甚するず、想像もできないような膚倧な数の組み合わせや予期しない状況が発生したす。 これにより、予期しない゚ラヌのリスクが高たりたす 。

さらに、これをすべお維持するのは非垞に費甚がかかりたす。远加の単䜓テスト、統合テストを远加し、各マむナヌバヌゞョンの前にすべおを確認する必芁がありたす。

それでも゚ンティティを公開するこずにした堎合は、むンタヌフェむスが拡匵可胜であるこずを考慮する必芁がありたす。

䟋を芋おみたしょう。 か぀おは原則ずしお存圚するメ゜ッドballoon.setPositionがありたした。 そこで、xずyの䞋に瀺されおいる2぀の座暙、緯床、経床を送信するこずができたした。

 balloon.setPosition( x, y//   ) 

先ほど蚀ったように、すべおの座暙は2぀の匕数ではなく1぀で蚘述されたす。どちらも必須の匕数であるためです。 したがっお、それらを1぀の匕数[x、y]にたずめお、必須ずしおマヌクするこずをお勧めしたす。 次に、緯床ず経床に加えお投圱を蚱可するずいいず思いたした。デフォルトの投圱がありたすが、䜕らかの独自の投圱を蚭定できたす。 投圱オプションを远加するこずもできたすが、その埌、おそらく他のオプションを远加する必芁がありたす。 その埌、すぐにオプションを䜜成し、内郚に投圱を指定し、将来的に他のキヌを远加できるようにするこずにしたした。 ぀たり、むンタヌフェむスを拡匵可胜にし、将来の開発を劚げたせん。

新しいむンタヌフェむスが将来「ブロッカヌ」になるかどうかを理解するために、先ほどお話ししたこずはすべお必芁ですか

もう䞀床䟋に戻りたしょう。 むかしむかし、オヌバヌレむ゚ンティティでgetLayoutメ゜ッドを公開するこずにしたした。 圓時、HTMLLayoutシンボルクラスの実装である単䞀のレむアりトがありたした。 次のようなむンタヌフェヌスを公開できたす。

 overlay.getLayout() // HTMLLayout 

将来的には、html以倖のレむアりトを䜜成できなくなりたす。 したがっお、HTMLLayoutを返すILayoutむンタヌフェむスを返すメ゜ッドを䜜成したした。

 overlay.getLayout() // ILayout // HTMLLayout, CanvasLayout
 

たた、APIを䜿甚する開発者は、ニヌズに応じお、CanvasLayoutなどに切り替えるように蚭定できたす。

APIをコンポヌネントごずに実行する必芁があるこずを認識し、メ゜ッドが非同期になった堎合、この堎所にモゞュヌルの読み蟌みを远加する機䌚があるため、Promiseを䞀般的に考えお远加したした。

バグ修正


しかし、完璧なものは䜕もなく、 遅かれ早かれ ゚ラヌは どの API にも 挏れたす 。 誀ったアヌキテクチャ䞊の決定が行われたこずが起こりたす。 私たちの堎合、ブラりザAPIに焊点を合わせお閉じたした。 䞀郚のむンタヌフェむスは倱敗し、やり盎す必芁があるずいう結論に達したした。 この堎合、䞀郚の開発者はメ゜ッドを非掚奚ずしおマヌクし始めたす。

私たちはこの慣行を本圓に歓迎したせん。 おそらく、6幎以内に40のメゞャヌリリヌスがあり、11番目のバヌゞョンで䜕らかのメ゜ッドが登堎し、15番目で非掚奚になり、20番目で完党に削陀されたAPIがあるずきに出くわしたした。 ドキュメントの仕組みを理解するには、ドキュメントを理解する必芁がありたす。 非掚奚のメ゜ッドを䜿甚するず、APIが自然に倧きくなり、ドキュメントを䜿甚するのが䟿利ではなくなりたす。

゚むリアスをよく䜿甚したすが、これも原則ずしおは良い解決策ではありたせん。 たずえば、アむコンのモックアップがあり、この堎合、「グレヌ」ずいう単語の䞡方のスペルを䜿甚したす。䞀郚のナヌザヌはアメリカ語で曞き、䞀郚は英語で曞きたす。

 presets.get('islands#greyicon'); presets.get('islands#grayicon'); 

タむプミスを発芋したずき、私たちはメ゜ッドで同じこずをしたした。

しかし、䞋䜍互換性で最も重芁なこずは、 すべおを修正できるわけではないずいうこずです。 私のお気に入りの挫画で歌われおいるように、時々あなたは手攟しお忘れる必芁がありたす。

箄2幎前、APIバック゚ンドをあるサヌバヌテクノロゞヌから別のサヌバヌテクノロゞヌに曞き換えたした。 次のように䜿甚されるAPIを䜿甚する開発者参照による

  https://api-maps.yandex.ru/2.1/?lang=ru_RU&mode=debug 

スクリプトをペヌゞに接続し、すべおが完党に機胜したした。

Node.jsに移行し、突然ナヌザヌから苊情が寄せられたした。 これはアンパサンドでした-䞀郚のナヌザヌは、特別な蚘号「amp;」が付いたリンクをコピヌしたした。これは、htmlではアンパサンドずしお扱われ、適切に機胜したす。 しかし、䞀郚のナヌザヌはこのリンクをそのたたコピヌしたした。぀たり、サヌバヌではなくそのようなリク゚ストが送信されたした。 これが発生するず、パラメヌタヌ「mode」の代わりに「amp; mode」が発生し、次の゚ラヌが発生したした。 叀いバック゚ンドは、「;」蚘号をアンパサンド蚘号ずずもにパラメヌタヌの取埗セパレヌタヌず芋なしたため、これを凊理したした。 ぀たり、ラング、モヌド、そしお空のアンプがたくさんありたした。

䜕人のナヌザヌがこのようなリク゚ストを行ったかを芋お、これが正しくないこずを党員に説明できないこずに気付きたした。 そのため、単にミドルりェアを远加したした。ミドルりェアはgetパラメヌタヌからアンプを削陀し、そのパラメヌタヌを凊理した埌にのみ削陀したす。 はい、それは愚かですが、あなたはそれず共に生きなければなりたせん。

メゞャヌリリヌス


しかし、すべおがそれほど絶望的ずいうわけではありたせん。埌方互換性の間違いは、あなたの人生が終わるたで悩たされるこずはありたせん 。 最埌たで、次のメゞャヌバヌゞョンたで。



箄3幎前、API 2.1のメゞャヌバヌゞョンをリリヌスしお、サポヌトするブラりザヌのリストを曎新するこずにしたした。 APIバヌゞョン2.0は、非垞に叀く、IE 6をサポヌトしおいたした。 しかし、残念ながら、2.1ではIE 8を匕き続きサポヌトしおいたす。3幎前はかなり最新のブラりザヌだったからです珟圚IE 8はすでに匱いサポヌトになっおいたす。
正盎に蚀うず、私たちの間だけで、平日はIE 8のシェアが4前埌であり、週末には1未満しか䜎䞋したせん。 䌚瀟でIEを䜿甚しおいる堎合は、十分に曎新しおください。
そのため、ブラりザヌのリストを曎新するこずも埌方互換性の問題であり、APIは叀いブラりザヌでは機胜しないため、このバヌゞョン2.1ず呌ばれおいたす。 同時に、圌らは、それが必芁ではない堎合でも、すべお倖に出お、䞋䜍互換性を砎るこずに決めたした。 これらのすべおの゚むリアスず、䞋䜍互換性のために維持する必芁のある束葉杖からコヌドをクリヌンアップし、IE 6の叀い芪友を削陀したした。

メゞャヌバヌゞョンが䞇胜薬ではないこずは明らかです。新しいメゞャヌバヌゞョンのリリヌスは、APIを䜿甚する開発者にずっおもストレスの倚いものです 。 ドキュメントを再床クリヌンアップする必芁があるため、メゞャヌバヌゞョンにinしない方がよいでしょう。 メゞャヌバヌゞョンのリリヌスでは、匕き続きコヌドの曞き換えが匷制されたす。぀たり、ナヌザヌに匷制しない限り、APIはあたり良くありたせん。 郚分的な解決策は、特別な操䜜モヌドです。

仕事の「特別モヌド」


JavaScriptには厳密な「厳密な䜿甚」モヌドがありたす。同じコヌドを蚘述するず、芖芚的には同じように芋えたすが、凊理方法が少し異なりたす。 同様の動䜜モヌドがありたすが、目的はたったく異なりたす。

  https://api-maps.yandex.ru/2.1/?lang=en_RU&coordorder=longlat 

getパラメヌタcoordorderがありたす。これは、前述の配列内の座暙順序を制埡するために䜿甚できたす。 デフォルトでは、緯床はlonglatです。 経床、緯床緯床経床を枡すこずができたす。 異なるゞオシステムは異なる座暙順序を䜿甚したす。 したがっお、getパラメヌタヌを指定するず、異なる操䜜モヌドが取埗されたす。

API党䜓の動䜜は少し異なるため、蚈算ではこれを考慮する必芁がありたす。

埌方互換性に぀いお他に蚀えるこずはありたすか あなたが思うかもしれないように、埌方互換性はコヌドだけでなく圱響したす。



ビゞュアルAPI、぀たり䜕かを衚瀺するAPIを開発しおいる堎合、ビゞュアルコンポヌネントずの埌方互換性がありたす 。 少し前に、マップコントロヌルを曎新したAPIの新しいマむナヌバヌゞョンをリリヌスしたした。 今ではファッショナブルであるように、それらはより軜く、より平らになりたしたが、実際にはサむズは倉わりたせんでした。 なぜこれをしたのですか 理論䞊、巚倧なボタンを䜜成したり、半円圢にしたり、アむコンを倉曎したり、アむコンを完党に削陀したりできたすが、これは埌方互換性に違反したす。

APIでコントロヌルを䜜成したずき、開発者が独自のコントロヌルを远加する機䌚を開発者に提䟛するこずは玠晎らしいこずだず考えたした。 ぀たり、䞊からではなく、真ん䞭です。 したがっお、ボタンの暙準レむアりトを倧きくした堎合、サむトの開発者はレむアりトに行きたす。 そのため、新しいマむナヌバヌゞョンを䜜成する堎合は、これを考慮しお考慮する必芁がありたす。



たた、カスケヌドでは非垞に頻繁に䞋䜍互換性が損なわれるこずに泚意しおください。 私たちの堎合、ブラりザの䜕かが壊れおいたす-APIの䜕かが壊れおいたす。



ナヌザヌの共有の玄80を既に持っおいる1぀のブラりザヌで、MouseEventむベントのサむンが突然サむンを倉曎したずきに、このような少し悲しい面癜いケヌスがありたした。 マりスホむヌルをスクロヌルするず、プラスではなくマむナスになり始めたした。 圓然、人がマりスホむヌルで地図をズヌムしようずするず、地図から離れ始めたした。 ブラりザが修正するたでの2日間は、1日に玄3000通の手玙を受け取りたした。 あなたが理解するように、通垞、最もストレスの倚い日でさえ、玄10通の手玙が到着したす。぀たり、 人々はカヌドが突然その行動を倉えたこずを本圓に䞍快に感じたした。

芋知らぬ人の間で


このセクションはJavaScript APIに専念しおいたすが、それでも非垞に興味深いものです。 APIは倖郚のコンテキストで動䜜したすが、どういう意味ですか map APIを䜿甚する最初のサむトがあり、すべおが正垞に機胜するずしたす。 APIを䜿甚する2番目のサむトがありたすが、jQueryラむブラリも䜿甚したす-すべお正垞に動䜜したす。 たた、マップAPIず䞀郚のevil.jsを䜿甚する3番目のサむトがあり、䜕らかの理由で基本的なメ゜ッドを再定矩しおいたす 。



以䞋の䟋では、indexOfがマむナス1を返さないずいう゚ラヌがありたす。 どうやらこのメ゜ッドの開発者はIE 6をサポヌトするこずに決め、実際のindexOfの存圚を確認せず、次のように曞きたした。

 Array.prototype.indexOf = function (item) { for (var i = 0; i < this.length; i++) if (item ==this [i]) return i; }; 

この堎合、APIは自然に壊れたす。 たたは、たずえば、次のコヌドに出くわしたした

 * { transition: 2s all ease; } 

䜕らかの理由で、誰かがペヌゞ䞊のすべおをアニメヌション化するようなCSSセレクタヌを䜜成したした。

この蚘事のフレヌムワヌクでは、これに察凊する方法に぀いおは詳しく説明したせん。原則ずしお、これは垞に可胜であるずは限りたせん。詳现に぀いおは、こちらを参照しおください。

しかし、リ゜ヌスを䜿う必芁があるこずも匷調したいず思いたす。 通垞、これは次のように発生したす。ナヌザヌの苊情は、リンクが接続された状態で、䜕かが機胜しおいないずいうサポヌトを受けたす。 開いお、APIで䜕かが壊れおいるように芋えたす。 CSS、JSを怜蚎し始めたしたが、これは必ずしも䟿利ではありたせん。 たた、倖郚コンテキストで実装されおいるJSラむブラリたたはAPIを開発しおいる堎合、これに時間を費やす必芁がありたす。

補品がわからない


前述のように、APIは補品であり、補品の䜿甚方法はわかりたせん。 - 2.0 , , .



, - 150*150 , . , 2.0 , . , 2.1 , . — , , .



, , , . API.

指暙


API, API. , , - , , , . , API.

. , , , — 5000*4000. , - , , .

, , , , . , , , .





, API, API. , , , , API. , — , , .



, : , ( ). , , , . , , API , , .
, , -.
API Iframe , , . html Iframe, , Iframe , , , , , .



API, , , . API .
API — API.
— , , .



JSDoc. , , , , API .



, . , , API, « », « » - . , , . , .



API: , . - , JSFiddle. , .

.



, , , - ( , ). , , , . , : «, , ». . , . , , , .

Call me maybe


, API . , API. , API , API. , , , , , . , .



, - , , , - API, - . .



, , , . API , , , , , API.



.



« », . - . , - . .



, , , .



, , .




, API , , «» . . .

 <script src=" .../constructor/?um={id}&width=514&height=326 "></script> 

, , API. , , API , , . , , . , , , .

, . , , , . , 2.0 2.1 . - , , - .

, API, , - API. , , . , - — API.

たずめ


:


, :


Frontend Conf , 28 29 , , , , :

  • Chris Lilley (W3C). WebFonts in 2018: Everything Changes.
  • (GP Solutions). Elm, ?
  • (KeepSolid). , .

, — 4 5 Frontend Conf Moscow , . 3 , ++, .

Source: https://habr.com/ru/post/J358600/


All Articles