Swift Academy · Oppitunti

Rajatut API:t ja luettavuusmallit

Soveltakaa scoped APIs ja nimeämismalleja DSL-kielissä: käyttäkää nimiavaruustunnisteita, ryhmitelkää apureilla ja pitäkää lohkot pieninä ja yksiselitteisinä.

Oppitunti 2/38 vaihetta

Rajatut API:t ja luettavuusmallit on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Miksi DSL kannattaa rajata

Helposti luettavat DSL:t rajoittavat lohkossa sallittuja toimintoja ja nimeävät asiat selkeästi. Käyttäkää nimiavaruuksia, pieniä apufunktioita ja ryhmittelyä, jotta tarkoitus pysyy ilmeisenä.

Nimiavaruusmalli

Sijoittamalla tokenit R:n alle supistatte rajapintaa ja estätte törmäykset sovelluksen symbolien kanssa. Kutsut pysyvät lyhyinä ja helposti silmäiltävinä.

struct Route { let method: String; let path: String }

// Namespace instead of global free functions
enum R {
    static func GET(_ path: String) -> Route  { Route(method: "GET",  path: path) }
    static func POST(_ path: String) -> Route { Route(method: "POST", path: path) }
}

@resultBuilder
struct RoutesBuilder {
    static func buildBlock(_ parts: Route...) -> [Route] { parts }
}

func routes(@RoutesBuilder _ content: () -> [Route]) -> [Route] { content() }

let table = routes {
    R.GET("/home")
    R.POST("/upload")
}
for r in table { print("\(r.method) \(r.path)") }

Ryhmittelyapu

Käyttäkää pientä ryhmittelyapuria lisäämään kontekstia (etuliite, tunnisteet) ilman toistoa. Lohko pysyy siistinä.

// Group routes by a shared prefix using a helper
func section(_ prefix: String, @RoutesBuilder _ content: () -> [Route]) -> [Route] {
    content().map { Route(method: $0.method, path: prefix + $0.path) }
}

let grouped = routes {
    R.GET("/health")
    section("/admin") {
        R.GET("/dashboard")
        R.POST("/upload")
    }
}
for r in grouped { print("\(r.method) \(r.path)") } // /admin/* prefixed

Huolten erottaminen

Suosikaa erillisiä pieniä buildereitä eri huolille, kuten reiteille ja middleware-komponenteille. Kukin lohko paljastaa vain tarvitsemansa ominaisuudet.

// A separate builder for middlewares (keeps concerns isolated)
struct Middleware { let name: String }

@resultBuilder
struct MiddlewareBuilder {
    static func buildBlock(_ parts: Middleware...) -> [Middleware] { parts }
}

enum M {
    static func log(_ name: String) -> Middleware { Middleware(name: "log:\(name)") }
    static func auth() -> Middleware { Middleware(name: "auth") }
}

func middlewares(@MiddlewareBuilder _ content: () -> [Middleware]) -> [Middleware] { content() }

let mw = middlewares {
    M.log("requests")
    M.auth()
}
print(mw.map(\.name))

Luettavuusvinkkejä

Malleja:

  • Käyttäkää lyhyitä verbejä: GET, POST, auth.
  • Pidätkää yksi toiminto kullakin rivillä.
  • Suosikaa suoria lohkoja; sisäkkäisyyttä tarvitaan vain kontekstin lisäämiseen.
  • Antakaa apufunktioille selkeät tunnisteet, kuten prefix:.

Validointiapuri

Tarjotkaa pieniä validointiapureita, jotta lohkot pysyvät oikeellisina. Keskeyttäkää toiminta nopeasti ja antakaa hyödylliset virheilmoitukset.

// Add a simple validator to catch mistakes early
func validate(_ routes: [Route]) -> [String] {
    var issues: [String] = []
    let seen = Set(routes.map { $0.method + " " + $0.path })
    if seen.count != routes.count { issues.append("Duplicate route detected") }
    if routes.contains(where: { !$0.path.hasPrefix("/") }) {
        issues.append("Paths must start with /")
    }
    return issues
}

let issues = validate(grouped)
print(issues.isEmpty ? "OK" : "Issues: \(issues)")

Rajattua rajapintaa koskeva valinta

Pikatarkistus: Mikä valinta tekee DSL-lohkosta turvallisemman ja selkeämmän?

Kertaus

Kertaus: Rajatkaa DSL:n käyttöalue nimiavaruuksilla, käyttäkää pieniä ryhmittelyapureita, pitäkää lohkot tarkasti kohdistettuina ja validoikaa aikaisin, jotta koodi on turvallisempaa ja helpommin luettavaa.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Rajatut API:t ja luettavuusmallit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Rajatut API:t ja luettavuusmallit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Rajatut API:t ja luettavuusmallit”?

Soveltakaa scoped APIs ja nimeämismalleja DSL-kielissä: käyttäkää nimiavaruustunnisteita, ryhmitelkää apureilla ja pitäkää lohkot pieninä ja yksiselitteisinä. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Rajatut API:t ja luettavuusmallit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pienois-DSL-kielten rakentaminen result builderien avulla
  2. Rajatut API:t ja luettavuusmallit
  3. Käytännön esimerkkejä ilman käyttöliittymäkehyksiä
← Takaisin: Swift Academy