Async Digital / Iris
Tu mewn i Iris

O URL i fwriad canonaidd

Y man

Llinyn yw dolen sy’n cyrraedd. Cyn i’r ap allu gweithredu arni, rhaid i’r llinyn hwnnw ddod yn benderfyniad y mae’r ap yn ei ddeall. Mae Iris yn tynnu un man ar gyfer y cam hwnnw: un protocol bychan y mae ei un dull yn troi unrhyw URL, boed yn ddolen ddwfn cynllun-personol neu’n Ddolen Gyffredinol, yn un bwriad wedi’i deipio. Y tu hwnt i’r man hwnnw mae’r ap yn rhesymu am y bwriad ac ni chyffwrdd byth â’r URL eto.

Crynodeb

Mewnbwn llinynnol yw URL. O’i adael heb ei reoli, mae pob sgrin sy’n ymateb i ddolen yn archwilio’r llinyn crai o’r newydd: gwirio’r cynllun, paru’r gwesteiwr, hollti’r llwybr, tynnu eitemau ymholiad, troi darnau’n ddynodwyr. Mae’r wybodaeth honno’n gwasgaru ar draws yr ap, ac mae’r copïau’n drifftio.

Mae Iris yn rhoi’r cyfan y tu ôl i un protocol bychan, URLParsing, y mae ei un dull yn mapio URL i fwriad wedi’i deipio sy’n eiddo i’r ap. Mae’r dychweliad yn gyflawn: mae URL na chaiff ei adnabod yn datrys i fwriad wrth gefn yn hytrach na methiant y mae’n rhaid i bob galwr ei drin. Mae’r darn hwn yn esbonio’r man, pam mae’r bwriad y mae’n ei gynhyrchu yn ganonaidd, a beth mae’r dyluniad yn ei gostio.


Problem

Mewnbwn llinynnol yw URL

Mae dolen ddwfn yn cyrraedd fel URL, sy’n llinyn ag iddo strwythur. I weithredu ar un, rhaid i’r cod ddarllen y strwythur hwnnw: pa gynllun, pa westeiwr, pa segmentau llwybr, pa eitemau ymholiad, ac yna troi’r darnau crai yn ddynodwyr yr ap ei hun. Nid String yw dynodydd sgwrs; math dynodydd-sgwrs yr ap ydyw, ac mae’n rhaid i rywbeth wneud y trosi. O’i wneud wrth y pwynt defnyddio, mae’r holl ddarllen hwnnw’n digwydd ym mhob man y gall dolen lanio.

Y drafferth yw dehongli dyblyg. Mae sgrin gosodiadau, sgrin sgwrs, prawf, a thriniwr Shortcut i gyd yn diweddu’n paru’r un ffurfiau URL fel llinynnau ac yn ail-ddeillio’r un dynodwyr. Nid oes dim yn eu gorfodi i gytuno. Caiff un safle ei ddiweddaru pan fydd llwybr yn newid ac anghofir un arall, ac mae’r un URL bellach yn golygu dau beth yn dibynnu ar ba god a’i darllenodd. Mae’r URL yn fewnbwn y mae’r ap cyfan yn dibynnu arno, wedi’i fynegi fel llinyn y mae’r ap cyfan yn rhydd i’w gamddarllen.

Y datrysiad yw darllen y llinyn yn union unwaith, mewn un man, a rhoi gwerth na all ei gamddarllen i bopeth sy’n dilyn. Y man hwnnw yw codec: math y mae ei unig waith yn troi URL yn fwriad wedi’i deipio sy’n eiddo i’r ap.


Mecanwaith

Un dull, un bwriad wedi’i deipio

Protocol o’r enw URLParsing yw’r man. Mae’n fychan yn fwriadol: protocol Sendable gyda math Intent cysylltiedig (sydd ei hun yn Sendable ac yn Equatable) ac union un dull, parse, sy’n cymryd URL ac yn dychwelyd Intent. Nid oes unrhyw arwyneb arall. Mae popeth y mae angen i ddolen ddod yn benderfyniad ap yn digwydd o fewn yr un alwad honno. Math sy’n cydymffurfio â URLParsing yw’r hyn y mae’r gyfres hon yn ei alw’n godec.

URL yn unig yw’r mewnbwn. Nid yw’r protocol yn poeni a gyrhaeddodd y ddolen fel dolen ddwfn cynllun-personol (botmessages://conversation/aria-7) neu fel Dolen Gyffredinol dros https: URLau yw’r ddau, ac mae’r ddau’n bodloni’r un contract. Mae codec yn rhydd i archwilio’r cynllun, y gwesteiwr a’r llwybr fel y mae angen. Gwaith manwl paru patrymau a datgodio segmentau wedi’u hamgodio yw ei fusnes preifat, a hwn yw’r unig fan yn yr ap sy’n ei wneud.

Ffig 1 Dwy ffurf ar yr un ddolen, un contract dosrannu. Boed yr URL yn gynllun personol neu’n Ddolen Gyffredinol, mae’r un dull unigol yn ei droi’n un bwriad wedi’i deipio.

Y math a ddychwelir yw’r penderfyniad tawel. Mae parse yn dychwelyd Intent, nid dewisol. Nid oes “methodd dosrannu” i’r galwr ganghennu arno. Mae URL na chaiff ei adnabod neu sydd ar ffurf annilys yn dal i esgor ar fwriad: bwriad wrth gefn y mae’r codec yn ei ddewis. Mae’r cod sy’n dilyn yn derbyn gwerth wedi’i deipio bob tro heb eithriad, ac nid oes rhaid iddo byth resymu am URL na chafodd ei ddosrannu.

Mae Iris yn cyflenwi’r rhannau i adeiladu codec o’r fath o dabl yn hytrach na switsh a ysgrifennwyd â llaw. Un rheol ar gyfer un ffurf URL yw URLRoute; mae URLPathRouter yn cerdded rhestr drefnus o lwybrau ac yn dychwelyd y bwriad cyntaf sy’n paru, neu ddim byd pan na fydd yr un yn paru. Mae’r llwybrydd hwnnw’n rhannol trwy gynllun, felly mae’n onest am fethiant paru. Mae codec a adeiledir arno’n mapio’r “dim byd” hwnnw i’w fwriad wrth gefn, sef sut mae’r llwybrydd yn aros yn rhannol tra bo’r codec yn aros yn gyflawn. Lle mae llwybr sydd wedi paru’n rhoi’n ôl werthoedd llwybr ac ymholiad a gipiwyd fel llinynnau crai, mae’r codec yn eu troi’n ddynodwyr yr ap ei hun (Tagged, RawRepresentable, beth bynnag y mae’r ap yn ei ddefnyddio) yn y fan a’r lle. Caiff llinynnau eu teipio’n union unwaith, wrth y ffin.


Gwarantau

Cyflawn, wedi’i deipio, canonaidd

Mae tair nodwedd yn ennill yr anuniongyrchedd, ac mae pob un yn cael gwared ar ddosbarth o gamgymeriad a adawodd y fersiwn wasgaredig ar agor.

Cyflawn. Am nad yw parse byth yn dychwelyd dim, nid oes rhaid i unrhyw safle galw drin “ni chafodd yr URL ei ddosrannu”. Mae’r achos anhysbys yn fwriad go iawn y penderfynodd yr ap arno unwaith, yn y codec, nid llwybr gwall a ail-weithredir ym mhob darllenydd. Mae un gwerth wedi’i deipio i switsio drosto, bob amser.

Wedi’i deipio. Math yr ap ei hun yw’r Intent, wedi’i gyfyngu i fod yn Sendable ac yn Equatable. Mae Sendable yn caniatáu i’r bwriad groesi ffiniau ynysu, fel y gellir ei drosglwyddo i actor neu i dasg heb agor ras ddata. Mae Equatable yn caniatáu i’r ap gymharu dau fwriad: dad-ddyblygu ailadroddiad, haeru un disgwyliedig mewn prawf, penderfynu a yw bwriad newydd yn wahanol i’r un diwethaf. Nid oes dim o hynny ar gael ar linyn URL crai heb ei ddosrannu eto.

Canonaidd. Mae Iris yn cadw dau gyfeiriad rheol URL mewn un man: mae’r un URLRoute sy’n dosrannu URL yn fwriad hefyd yn allyrru’r URL ar gyfer y bwriad hwnnw, a gall y llwybrydd redeg y naill ffordd neu’r llall. Am fod y pâr yn byw mewn un gwerth, ni all yr URL y byddech yn ei adeiladu ar gyfer bwriad a’r bwriad y byddech yn ei ddosrannu o’r URL hwnnw ddrifftio ar wahân yn dawel. Y bwriad yw’r ffurf ganonaidd; un cyfresiad ohono yw URL, wedi’i ddiffinio unwaith, y ddwy ffordd.

Ffig 2 Mae’r URL yn dod i ben wrth y man. Mae Broadcaster Iris yn dosrannu’r URL sy’n cyrraedd unwaith ac yn anfon Baton<Intent> ymlaen; mae pob tanysgrifiwr y tu hwnt iddo’n gweld y baton wedi’i deipio, byth y llinyn.

Mae’r wobr yn ymddangos lle bynnag y bydd y bwriad yn teithio. Mae Broadcaster Iris yn generig dros unrhyw fath sy’n cydymffurfio â URLParsing: mae’n dosrannu URL sy’n cyrraedd unwaith, yn lapio’r bwriad sy’n deillio o hynny mewn Baton (y bwriad ynghyd â’i gyd-destun cydberthyn llif), ac yn darlledu’r baton hwnnw i bob tanysgrifiwr gweithredol, gan ail-chwarae’r un diwethaf i unrhyw danysgrifiwr sy’n ymuno’n ddiweddarach. Y tu hwnt i’r darlledwr, mae’r URL wedi mynd. Mae tanysgrifwyr yn derbyn gwerthoedd Baton<Intent> ac yn rhesymu am y bwriad. Safodd y llinyn wrth y man.

Darllenir yr URL unwaith, wrth y drws. Mae popeth y tu hwnt iddo’n rhesymu am fwriad wedi’i deipio, byth am linyn y gallai ei ddarllen mewn ail ffordd, wahanol.


Cost

Beth mae’r man yn ei gostio

Nid yw’r anuniongyrchedd am ddim, ac mae’n werth enwi’r bil yn hytrach nag esgus bod y patrwm i gyd o blaid.

Yr hyn y mae’r dyluniad yn talu amdano

Mae’n rhaid i chi ddylunio math bwriad. Mae angen ar yr ap un eirfa wedi’i theipio o bopeth y gall dolen ei olygu, ac mae’n rhaid ei chadw’n gydgam â’r cyrchfannau sy’n bodoli mewn gwirionedd. Nid yw codec byth ond cystal â’r bwriad y mae’n ei dargedu, ac mae’r bwriad hwnnw bellach yn arteffact go iawn i’w gynnal, nid damwain o ba linyn bynnag y digwyddodd triniwr ei baru.

Y codec yw’r un man y mae’n rhaid iddo fod yn gywir. Mae holl risg paru URLau wedi’i chrynhoi yno yn lle ei thaenu’n denau, sef y pwynt, ond mae’n golygu bod y codec yn haeddu profion gofalus: y llwybrau y mae’n eu paru, y dynodwyr y mae’n troi’r hyn a gipiwyd yn iddynt, a’r bwriad wrth gefn y mae’n glanio arno. Mantais un man i’w gael yn anghywir yw mai dim ond un man sydd i’w gael yn gywir.

Mae dosrannu cyflawn yn cuddio’r methiant. Am fod URL na chaiff ei adnabod yn datrys i fwriad wrth gefn yn hytrach na gwall, nid yw llwybr yr anghofioch ei ychwanegu’n chwalu; mae’n datrys yn dawel i’r bwriad wrth gefn. Mae’r rhwyd ddiogelwch yn fwriadol, ond mae’n gwneud y bwriad wrth gefn yn achos go iawn i’w drin ac i’w brofi, nid cornel i’w hanwybyddu.

Darllenwch y llinyn unwaith, ac mae gweddill yr ap yn cael gwerth y gall ymddiried ynddo. Y bwriad wedi’i deipio y mae’r man hwn yn ei gynhyrchu yw’r hyn y mae y datrysydd ymwybodol o gyflwr a’r datrysydd tap-ac-URL yn mynd ymlaen i’w lwybro, a’r hyn y mae’r darlledwr yn ei roi i bob tanysgrifiwr. Mae’r map ehangach o sut y caiff dolen ei datrys, ei danfon, a’i chymhwyso’n byw ar yr hwb dolennu dwfn.