Web開発における.NET API過去ず未来

倚くの人々は、APIの䜜成は特定のプロセスであり、APIプロゞェクトの開発に専門的に関䞎しおいる人だけがそれを理解する必芁があるず考えおいたす。 しかし、実際には、APIをなんらかの方法で䜜成したす。新しいクラス、サヌビス、同僚や顧客向けです。



カットの䞋で、Web APIデザむンの䜜成、倉曎の蚈画、バヌゞョニングの管理、APIナヌザヌずの察話方法に関する実甚的なヒントを芋぀けようずしたした。 私たちは、どのような困難が生じる可胜性があり、どんな兞型的な間違いが通垞なされるかを芋぀けようずしたした。 たた、歎史からのさたざたな興味深い事実や、将来の予想される倉化に぀いおも読んでください。



私たちの察談者であるディラン・ビヌティヌは、 StackOverflowで高い評䟡を埗おいたす。぀たり、圌は、うたく、面癜い、そしお重芁なこずに、質問に正しく答える方法を知っおいたす。 玠晎らしい経隓により、圌は圌自身の䟋を䜿っお過去から䜕かを語るこずができ、建築家の職業は圌の口調を保ち、トレンドず高床な技術に関する新しい知識をもたらしたす。







-どのAPIを開発しおいたすか APIの蚭蚈はどの時点で突然゜フトりェア開発に移行したすか



Dylan Beattyこれは非垞に興味深い質問です。゜フトりェア開発の分野での最倧の誀解の1぀は、APIの蚭蚈が他のすべおずは別に発生するものだず思うからです。 もちろん、HTTP APIなどの特定の皮類のAPIプロゞェクトは䞀般公開されたすが、蚭蚈を䜜業の別の郚分ず芋なすこずは理にかなっおいたす。 しかし、実際には、ほずんどの開発者は、実際に垞にAPIを䜜成したす。圌らは、APIを実行しおいるこずに気付かないのです。 クラスの1぀でパブリックメ゜ッドを蚘述するか、デヌタベヌステヌブルの名前を遞択するたびに、むンタヌフェヌスを䜜成したす-通垞の日垞的な英語の意味で-これは、将来特定の時点で他の開発者によっお最終的に䜿甚されるものです。 チヌムの他の人がクラスずメ゜ッドを䜿甚したす。 他のコマンドは、デヌタスキヌムたたはメッセヌゞ圢匏を䜿甚したす。



興味深いのは、開発者が䜜業䞭のコヌドがAPIの䞀郚になる可胜性があるこずを理解しおいる堎合、開発者は同じ方向に行き過ぎおいるずいうこずです。 ゚ッゞケヌスや、実際には必芁のないその他のあらゆる皮類の実装を開始したす。単に埌で他の人が必芁になる可胜性があるためです。 ここでラむンを埮劙に感じる必芁があるず思いたす。このラむンを理解するための鍵は、あなたが今必芁な関数のセットを䜜成する際に非垞に具䜓的である必芁があるこずです。 ただし、このセットを可胜な限り再利甚可胜か぀自己蚘述的にするこずが重芁です。 Pieter Hintjensには、良いAPI蚭蚈のための10のルヌルず呌ばれる優れた゚ッセむがあり、このタむプのアむデアのより詳现なビュヌを提䟛したす。



私が珟圚取り組んでいる最倧のAPIプロゞェクトは、むギリスのSpotlightで行っおいるプロゞェクトです。 これは、プロの俳優に関するさたざたな情報を明らかにするハむパヌメディアAPIです。 仕事は、挔技プロゞェクト、映画やテレビ、およびキャスティング業界で䜿甚されるその他のさたざたなデヌタで提䟛されおいたす。 RESTずしお知られるアヌキテクチャスタむルでこのAPIを構築しおいたす。RESTが䜕であるかを完党に認識しおいない堎合は、サンクトペテルブルクで開催されるDotNextカンファレンスで私のプレれンテヌションにアクセスし、それに぀いお調べるだけです。



HTTP APIを䜜成するためのさたざたなパタヌンがありたす-RESTがあり、GraphQLがあり、SOAPやRPCなどがありたす。 しかし、私にずっお、RESTの最倧の魅力は、RESTfulスタむルの制限により、APIがサポヌトする必芁がある抂念ず操䜜の接続が自然に匱くなるこずです。



-䞋䜍互換性によっお「殺される」最も有名なプログラムの1぀はIEです。 このブラりザには、以前のバヌゞョンずの互換性を維持するために必芁なアプリケヌションが倚すぎたした。 この問題は、Edgeず呌ばれる新しいアプリケヌションを远加するこずで解決されたした。このアプリケヌションは曎新され、すべおの新しい暙準をサポヌトしたす。 埌方互換性のtrapに陥らないようにするには たぶん、モゞュヌルを䜿甚する䟡倀がありたすが、モゞュヌルはレむダヌを䜿甚したせんか あるいは、RESTful API、Service Oriented Architecture、たたは他の䜕かを䜿甚しお、どういうわけかAPIを眮き換えたすか



Dylan Beattyずっず前にWebアプリケヌションの構築を始めたした。 圌はInternet Explorerが登堎する数幎前に最初のペヌゞを曞きたした。 そしお、唯䞀のブラりザがNCSA MosaicずErwiseだったずき。 Webの歎史を振り返るず、珟圚存圚するWebがInternet Explorerのようなものによっおモデル化され、圱響を受けおいるこずに気付くのは魅力的です。 そしお、あなたは絶察に正しいです。 Microsoftが最新バヌゞョンのWindowsにたったく新しいEdgeブラりザヌを導入した理由の1぀は、Internet Explorerの䞋䜍互換性ぞの取り組みが、既存のIEコヌドベヌスに基づく新しいWeb暙準の実装を非垞に困難にしたためです。



IEにこの䞋䜍互換性が存圚する理由の䞀郚は、2000幎頃に䌁業のITシステムの開発方法にわずかな倉化があったこずです。



゚クむティコントロヌル、プロダクトアカりンティング、HR、プロゞェクト管理など、さたざたなタむプのビゞネスオペレヌションに独自のアプリケヌションを䜿甚しおいる䌁業は無数にありたす。 1980幎代から1990幎代初頭にかけお、それらのほずんどは䞭倮のメむンフレヌムシステムを䜿甚し、埓業員はタヌミナル゚ミュレヌタのようなものを䜿甚しお䞭倮のサヌバヌに接続しおいたした。 しかし、1990幎代埌半のドットコムの最初の波の埌、䌁業はほずんどのコンピュヌタヌがWebブラりザヌずネットワヌク接続を備え、叀いメむンフレヌム端末アプリケヌションを新しいWebアプリケヌションに眮き換えるこずができるこずに気付きたした。



圓時のWindowsは倧きな垂堎シェアを占めおおり、ほずんどのWindows PCでInternet Explorerがデフォルトのブラりザヌであったため、倚くの組織はInternet Explorerの特定のバヌゞョンでのみ動䜜するむントラネットアプリケヌションを構築したした。 ActiveXサポヌトなどの特定の機胜を利甚するために、これを行うこずがありたした。 しかし、倚くの堎合、クロスブラりザテストを実斜する必芁がないずいう事実のために、圌らはお金を節玄するためにそれをしたず思いたす。 これは、かなり倧きな商甚アプリケヌションで発生したした。 2011幎であっおも、Microsoft Dynamics CRMはInternet Explorer以倖のブラりザヌをサポヌトしおいたせんでした。



そのため、Internet Explorerで動䜜するアプリケヌションの䜜成に時間ずお金を費やした倚くの䌁業がありたす。 これらのアプリケヌションは、Web暙準や挞進的な改善を䜿甚しお䜜成されたものではなく、埌続バヌゞョンずの互換性を䜜成しようずするものでもありたせん。オペレヌティングシステムで実行される特定バヌゞョンのブラりザヌ甚に明瀺的に開発されたした。 たた、MicrosoftがInternet Explorerの新しいバヌゞョンをリリヌスするたびに、これらのアプリケヌションは「クラッシュ」し、䌁業は叀いむントラネットアプリケヌションの曎新に投資するこずを望たず、すべおをブラりザヌのせいにしたした。 しかし、話は終わりではありたせん。2017幎には、MicrosoftはただIE11を出荷しおいたす。IE11は、IE9゚ンゞンに切り替える互換モヌドを備えおいたすが、IE7であるずいうナヌザヌ゚ヌゞェント文字列を送信したす。 珟圚、私が知っおいるすべおの人がGoogle ChromeたたはSafariを䜿甚しおネットサヌフィンをしおいたすが、同時に、倚くの人々はただデスクトップにIEショヌトカットを持っおいるので、そこからレガシヌシステムの1぀を入力できたす。



だから...マむクロ゜フトがこのtrapをどのように回避できたのかずいう質問に戻りたす。 倚くの機䌚があったず思いたす。 たたは、最初にモゞュラヌレンダリング゚ンゞンを䜿甚しおIEを䜜成し、埌続のバヌゞョンが適切な゚ンゞンを遞択的に実行しお特定のWebサむトたたはアプリケヌションをレンダリングできるようにしたす。 MARQUEEタグやActiveXプラグむンなどのアドホックサポヌトを実装する代わりに、圓時存圚しおいたWeb暙準をサポヌトするためにもっず努力するこずができたでしょう。これにより、これらの難解な機胜をサポヌトした埌の頭痛を回避できたすバヌゞョン。 しかし、これはすべお意味がありたせん。 Internet Explorerの最初のバヌゞョンを開発するずき、Web暙準を䞀流でサポヌトする優れたアプリケヌションを䜜成するのではなく、Netscape Navigatorを殺しお垂堎セクションで勝぀こずが重芁でした。 そしおそれは働いた。



-誰かが新しいAPIを導入しようずしおいるずしたす。 圌はいく぀かの芁件を収集し、バヌゞョンを提䟛し、フィヌドバックを受け取りたす。 プロセスはシンプルに芋えたす。 しかし、途䞭で萜ずし穎はありたすか



ディラン・ビヌティい぀も 芁件が倉曎されたす-これは事実です。 あなたが犯す可胜性がある最倧の間違いの1぀は、これらの倉曎を予枬し、将来を芋越した蚭蚈を行うこずです。 理論的にはこれで成果が埗られる可胜性がありたすが、倚くの堎合、将来の倉曎を取り入れようずしたため、さらに耇雑なデザむンが手元にありたす。 倚くの堎合、萜ずし穎はあなたが制埡できないものです。 たずえば、法埋が倉わり、デヌタを異なる方法で提䟛する必芁がありたす。 たたは、組織内の他のシステムに倉曎が加えられたす。 たたは、クラりドホスティングプロバむダヌの1぀から、必芁な機胜が廃止されたカテゎリヌに移行されたず蚀われたす。



可胜なむンタヌフェヌスオプションからシンプルで䜿いやすいものを遞択し、それを実行しお枡すこずが最善です。 APIが安定しおいる段階に迅速に進むために、倖郚の技術的な負債はなく、チヌムは次のタスクに進むこずができたす。 そのため、その埌予期せぬ問題が突然発生した堎合、゜リュヌションで䜿甚できる安定したコヌドベヌスず、すべおを解決するために時間ず意欲を持っおいるチヌムができたす。 偶然に萜ずし穎に出䌚わない堎合は、単にバックログの次の項目に進むこずができたす。



-ここでは、APIのバヌゞョンv1.0およびアプロヌチv1.1をリリヌスしたした。 おそらく私たちの倚くは、 http//example.com/v1/testずhttp://example.com/v1.1/testたたはそのようなものの䞡方を䜜成したす。 あなたの意芋では、開発者がv1.0に関しおv1.1 API蚭蚈を改善するのに圹立぀プラクティスは䜕ですか



Dylan BeattyセマンティックバヌゞョニングSemVerの抂念を読んで、メゞャヌバヌゞョン、マむナヌバヌゞョン、およびパッチバヌゞョンの違いを実際に理解しおください。 SemVerは、0.xから0.1の間で重倧な倉曎を行うべきではないず述べおいるため、最も重芁な郚分は、特定のAPIの重倧な倉曎を理解するこずです。



たずえば、JSONを返すHTTP APIを䜿甚する堎合、䞀般的な重芁ではない倉曎は、リ゜ヌスの1぀に新しいデヌタフィヌルドを远加するこずです。 バヌゞョン1.1を䜿甚するクラむアントには远加フィヌルドが衚瀺され、このフィヌルドを最倧限に掻甚できるこずが期埅されたすが、バヌゞョン1.0を䜿甚する顧客は認識されないプロパティを無芖できたす。 これは、APIのバヌゞョン管理をどのように管理すべきかに぀いおのもう1぀の非垞に近い質問です。 最も䞀般的な゜リュヌションの1぀は、ルヌティングを介しおURLを送信するこずです-api.example.com/v1.1の代わりにapi.example.com/v1/



ただし、RESTfulシステムの制限に準拠する堎合は、バヌゞョンの倉曎が基瀎ずなるリ゜ヌスたたはビュヌの倉曎を衚すかどうかを理解する必芁がありたす。 URIはUniform Resource Identifierであり、同じリ゜ヌスに向けるために䜿甚するURIを実際に倉曎すべきではないこずに泚意しおください。



たずえば、リ゜ヌスapi.example.com/images/monalisaがありたす。 このリ゜ヌスをJPEGAcceptimage / jpegたたはPNGAcceptimage / pngずしお芁求するか、サヌバヌにこのリ゜ヌスのプレヌンテキスト衚珟があるかどうかを確認できたすAcceptapplication / json-それだけです同じ基になるリ゜ヌスの異なる衚珟のみであり、それらはすべお同じURIを持぀必芁がありたす。



たたは、たずえば、組織で䜿甚されおいるCRMシステムを完党に眮き換えたした。この堎合、クラむアントの「バヌゞョン1」は叀いCRMシステムで䜿甚されおいたレコヌドを衚し、「バヌゞョン2」は同じクラむアントを衚したすが、完党に新しいプラットフォヌム。 この堎合、おそらくそれらを異なるリ゜ヌスず芋なし、異なるURIを䞎えるこずが理にかなっおいたす。



バヌゞョニングは泚意が必芁です。 最も簡単な方法は、䜕も倉曎しないこずです。



-.NET Core-そのAPIに぀いおどう思いたすか

Dylan Beatty .NET Coreは2015幎に初めお発衚され、圓初は.NET Core 5.0ず呌ばれおいたした。 これは、.NET FrameworkおよびCommon Language Runtimeの単玔化された代替手段になるず予想されおいたした。 .NET Coreを他のプラットフォヌムに移怍しやすくするために、すべおの条件を䜜成するこずは玠晎らしいアむデアでした。 確かに、同時に、.NET Coreで開かれおいるAPIず、ほずんどのアプリケヌションが構築されおいる「暙準」の.NET / CLR APIずの間にはただかなりの違いがありたす。



これは、私が読んだこずやさたざたな人々ずの䌚話に基づいた単なる解釈であるず思いたす。アむデアは、.NET Coreがスレッド、ファむルシステムぞのアクセス、ネットワヌクアクセス、プラットフォヌムベンダヌ、およびオヌプン゜ヌスコミュニティは、モゞュヌルずパッケヌゞの開発を既に開始しおおり、その結果、Javaクラスラむブラリや.NET Frameworkなどの゜リュヌションが提䟛する機胜レベルに到達したす。 原則ずしお、これは玠晎らしいアむデアですが、悪埪環のようなものを䜜成したす。ナヌザヌなしでプラットフォヌム甚のラむブラリを䜜成したい人や、ラむブラリなしでプラットフォヌムを䜿甚したい人はいたせん。



そのため、クロスプラットフォヌムの.NETには、サポヌトされおいるさたざたなプラットフォヌムのナヌザヌや開発者が期埅するラむブラリを提䟛する暙準API仕様が必芁であるず刀断されたした。 これは、.NET Framework 4.6.1で既に完党にサポヌトされおいる.NET Standard 2.0であり、.NET CoreおよびXamarinの将来のバヌゞョンで完党にサポヌトされる予定です。 もちろん、.NET Core 1.1は既にリリヌスされおおり、正垞に動䜜しおいたす。WindowsたたはLinuxたたはmacOSを䜿甚しおいるにもかかわらず、CWebアプリケヌションを䜜成するために䜿甚できるようになりたした。 しかし、.NET Coreの次のリリヌスでは、フレヌムワヌクずパッケヌゞの倚くの開発者がプロ​​ゞェクトを.NET Coreに移行したいず思うようになり、開発者や組織が独自のアプリケヌションを簡単に移行できるようになるず思いたす。



-APIの柔軟性ずAPIの粟床。 倚くの異なるタむプの倀を取埗する機胜を備えたAPIメ゜ッド蚭蚈を䜜成できたす。 ただし、パラメヌタヌにいく぀かのルヌルを指定しおメ゜ッドを䜜成できたす。 䞡方のパスが正しいです。 これら2぀の可胜性の境界はどこにありたすか い぀厳密なAPIを䜜成する必芁があり、い぀柔軟なAPIデザむンを䜜成する必芁がありたすか



Dylan Beattyメ゜ッドシグネチャが柔軟なAPIを実装するずきは、スタックのどこかに耇雑さを送信するだけです。 スキヌパスを芋぀けるためのAPIを䜜成し、DoSearchSearchCriteria基準ずDoSearchstring resortName、string countryCode、int minAltitude、int maxDistanceToSkiListのいずれかを遞択するずしたす。

これらのメ゜ッドの最初は非垞に簡単に拡匵可胜です。 メ゜ッドのシグネチャを倉曎せずにSearchCriteriaオブゞェクトの定矩を拡匵できたす。 ただし、この堎合、特定のメ゜ッドを倉曎するだけでなく、システムの動䜜も倉曎したす。



察照的に、2番目のDoSearchメ゜ッドのシグネチャに新しい匕数を远加できたす。 Cなどの蚀語を䜿甚する堎合は、匕数にデフォルト倀を指定できたす。 そしお、メ゜ッドに新しい匕数を远加しおも、プロゞェクト内で䜕も壊すこずはありたせん。同時に、これらの同じ匕数に適切なデフォルト倀を蚭定したす。



ある時点で、APIナヌザヌず通信し、APIがサポヌトする怜玢パラメヌタヌを䌝える必芁がありたす。 そしお、これを行うにはいく぀かの方法がありたす。 NuGetパッケヌゞずしおむンストヌルされ、コヌドから䜿甚される.NET APIを䜜成する堎合、メ゜ッドずパラメヌタヌにXMLコメントを䜿甚するこずは、APIにリク゚ストを行うずきに指定する必芁があるものをナヌザヌに䌝えるための優れた方法です。 APIがHTTPサヌビスの堎合、 SIRENなどのハむパヌメディア圢匏に泚意しおください。これにより、サポヌトされるパラメヌタヌず範囲を指定できたす。



次の10幎で、機械孊習システムによっお駆動されるAPIの完党に異なるカテゎリが登堎し、䞀般に受け入れられおいる倚くのAPI蚭蚈ルヌルが適甚されなくなるず思いたす。 通垞の蚀語で必芁なものを指定するだけのスキヌチケット怜玢APIを突然取埗しおも、たったく驚きたせん。 メ゜ッドシグネチャさえもありたせん-DoSearch「スキヌシャレヌ、フランスたたはむタリア、1400m以䞊、8ベッドルヌムで12人を眠る、2018幎1月18〜25日から利甚可胜」のようなものを呌び出すだけです。コアでは、システムがすべおを行いたす。 これらの機械孊習の開発方法は刺激的です。 しかし、圌らのクリ゚むタヌは、さらに泚目を集めるために、開発者ずデザむナヌのためにいく぀かの興味深い倉曎を加えたいず考えおいたす。



今幎、ディランビヌティヌは再びロシアを蚪問し、5月にサンクトペテルブルクで開催されるDotNextカンファレンスで講挔したす。そのため、 圌の新しいレポヌトを聞くだけでなく、圌に質問したり、ロンドン.NETナヌザヌグルヌプに挚拶したりするこずができたす。



All Articles