Microsemi AN1256 Web Programmerare ansökan
Introduktion
JSON (JavaScript Object Notation) är en öppen standard file format som använder läsbar text för datautbyte. Det är ett vanligt dataformat som används för asynkron webbläsare/serverkommunikation.
För det nya web siddesign, kan JSON-formatet ersätta den ursprungliga AJAX-stilen. Jämför med AJAX, att använda JSON gör att Web implementering enklare och enklare. Utvecklaren behöver bara fokusera på web siddesign och Web hanterarimplementering kan utelämnas eftersom JSON-åtkomstmetoden redan stöds i varje WebStaX mjukvarumoduler.
Detta dokument anger programmeringsguiden för mjukvaruingenjören som behöver utveckla Web sida via JSON. Detaljprocedurerna och examples som också ingår i följande avsnitt.
JSON dataåtkomstflöde
Överview
Här är JSON-dataåtkomstflödet som en HTTP-anslutning initieras från klienten (webbläsaren). HTML-tabellen skapas dynamiskt enligt den mottagna JOSN-datan från serverns (DUT) sida.
Figur 1. Åtkomstflödet mellan klient och server
Begär/svar JSON-data
JSON-förfrågningspaketet är baserat på HTTP-begäranpostmetoden och innehållet måste följa MSCC JSON-formatet.
- Begär JSON-syntax:{"metod":" ","params":[ ], “id:”jsonrpc”}
- Svar JSON-syntax: {"fel": ,"resultat": , "id:"jsonrpc"}
Följande ögonblicksbilder visar JSON-innehållet mellan webbläsaren och DUT.
Figur 2. Ögonblicksbild av HTTP-begäran från klienten
Figur 3. Ögonblicksbild av HTTP-svar från server
MSCC JSON-specifikation
För att få den fullständiga JSON-informationen inklusive metoden, parametern, beskrivningen etc. Skriv "http:// /json_spec" i webbläsarens adressfält. Det finns en annan åtkomstmetod via JSON-metodnamnet "jsonRpc.status.introspection.specific.inventory.get", den används för en specifik metod.
Figur 4. Ögonblicksbild av JSON-specifikationen web sida
Web ram
De Web ram i WebStaX programvara är baserad på MooTools med öppen källkod. Det är en samling JavaScript-verktyg med MIT-licens. (http://mootools.net/license.txt) Menyraden och de flesta av web sidor är baserade på ramverket. Både AJAX och JSON-algoritmen är redan integrerade i dess verktyg.
Dessutom, WebStaX programvara tillhandahåller andra verktyg som är användbara för JSON web siddesign.
- json.js – Använd för att överföra/ta emot dynamisk data med JSON-syntax.
- dynforms.js – Använd för att skapa HTML-tabellen dynamiskt.
- validate.js – Använd för validering av HTML-formulär.
De fullständiga JavaScript-biblioteken finns under källträdskatalogen: webstax2\ vtss_appl\web\html\lib.
Riktlinje för JSON Web siddesign
Det här avsnittet vägleder hur du designar en web sida baserad på MSCC JavaScript-bibliotek. Vi använder Mirror global konfigurerad web sida som example här. Den asynkrona kommunikationen är baserad på HTTP JSON-åtkomstmetoden och alla globala konfigurerade parametrar listas i en dynamisk HTML-tabell.
De web sidlayouten listas nedan och hela källkoden finns under källträdskatalogen: webstax2\vtss_appl\mirror\html\mirror_ctrl.htm. För att bli mer typiskt web sidhänvisning, se avsnittet bilaga.
Spegel& RSpegelkonfiqurationstabell
Figur 5. Example av globalt konfigurerad tabell
Redigera Web sida
HTML-huvud
Inkludera de JS-bibliotek som behövs i HTML-koden tag.
Initiera den dynamiska tabellresursen
- När HTML-dokumentet är klart, anrop DynamicTable() för att initiera den dynamiska tabellresursen.
- DynamicTable() används för att skapa den dynamiska tabellen efter att ha tagit emot JSON-data.
- Det kommer sedan att anropa requestUpdate för att initiera JSON-kommandoflödet.
- window.addEvent('domready', function() {
- // Skapa ett formulär med tabellkropp för att ta emot/sända JSON-data
- myDynamicTable = new DynamicTable(“myTableContent”, “config”,,”plusRowCtrlBar”);
4 - requestUpdate();
- });
Begär/svar JSON-data
- När HTML-dokumentet är klart, använd requestJsonDoc() för att skicka JSON-förfrågan "mirror.config.session.get" för att få information om de konfigurerade sessionerna.
- Efter att JSON-data för "mirror.capabilities.get" har tagits emot kommer callback-funktionen requestUpdate() att behandlas. Funktionen requestUpdate anropar sedan "mirror.config.session.get" för att få den aktuella konfigurationen. När den aktuella konfigurationen tas emot anropas funktionen processUpdate för att bygga tabellen som ska visas.
- funktion requestUpdate()
- {
- // Återställ tabellinnehåll
- myDynamicTable.restore();
5 - // Denna tabell två JSON-data.
- requestJsonDoc(“mirror.config.session.get”, null, processUpdate, “config”);
- }
Bearbeta mottagna JSON-data
- Funktionen processUpdate() används för att layouta den dynamiska tabellen efter att ha tagit emot JSON-data.
- AddRows() används för att lägga till tabellrader. myDynamicTable.update() layouten
HTML-tabell enligt data i tabellrader.
- funktion processUpdate(recv_json, namn)
- {
- // Ignorera processen om ingen data tas emot
- if (!recv_json) {
- alert(“Hämta dynamisk data misslyckades.”);
- återvända;
- }
- // Spara mottagen JSON-data
- myDynamicTable.saveRecvJson(“config”, recv_json);
- // Lägg till tabellrader
- var table_rows = addRows(recv_json);
- myDynamicTable.addRows(tabell_rader);
- // Uppdatera den här dynamiska tabellen
- myDynamicTable.update();
- // Uppdatera timer
- var autorefresh = document.getElementById(“autorefresh”);
- if (autorefresh && autorefresh.checked) {
- if (timerID) {
- clearTimeout(timerID);
- }
- timerID = setTimeout('requestUpdate()', settingsRefreshInterval());
- }
- }
Lägg till tabellrader
- I funktionen addRows() använder vi JSON-formatet för att fylla varje globalt konfigurerad parameter i tabellraden.
- Alla HTML-fält listas i JSON-matrisen ("tabell_rader") och syntaxen för tabellfältet är nedan.
Syntax:
table_rows:[ , , … ] : { , , … }
: {"typ": , "params":[ , , …, ]}
- I det här fallet har varje rad fem fält: "Session ID", "Mode", "Type", "VLAN ID" och "Reflector Port" T.ex.ample,
Sessions-ID (Namnfält: int32_t) | 1 (Id för spegelsessionen) |
Läge (Namnfält: vtss_bool_t) | sann (Betyder att spegelsessionen är aktiverad) |
Typ (Namnfält: uppräkning
{mirror, rMirrorSource, rMirrorDestination} |
RMirror källa (detta är källan till en fjärrspegelsession |
VLAN ID (Namnfält: uint16_t) | 200 (Vlan som används för spegling) |
Reflektorport (Namnfält: vtss_ifindex_t) | Gi 1/1 (Porten till vilken den speglade trafiken skickas |
- MyDynamicTable.addRows() kommer att konvertera JSON-data till HTML-format och mata ut HTML-tabellen.
- funktion addRow(nyckel, val)
- {
- var none_map_val = 0xFFFFFFFF, none_map_text = "Ingen", none_interface_text = "INGEN";
- var tunnel_mode_suffix = val.TunnelMode == “useglobal” ? ” (” + oTTunnelMode[oVTunnelMode.indexOf(global_conf.tunnelMode)] + “)” : “”;
- var rad = {fält:[
- {typ:”länk”, params:[“cr”, “mirror.htm?session_id=” + nyckel, nyckel]},
- {typ:”text”, params:[oTMode[oVMode.indexOf(val.Mode)], “c”]},
- {typ:”text”, params:[oTType[oVType.indexOf(val.Type)], “c”]},
- {typ:”text”, params:[val.Type == “spegel” ? "-":
val.RMirrorVlan, "c"]}, - {typ:”text”, params:[val.Type == “rMirrorSource” ?
val.ReflectorPort : “-” , “c”]} - ]};
- återvända rad;
- }
- funktion addRows(recv_json)
- {
- var rad, tomt_kolspan = 7;
- var table_rows = new Array();
- // Lägg till tabellhuvud
- addHeader(tabell_rader);
- // Lägg till en rad
- Object.each(recv_json, function(record) {
- table_rows.push(addRow(record.key, record.val));
- });
- returnera table_rows;
- }
Web hjälpsida
För den web hjälpsidans design, kan hjälpbeskrivningen hänvisa till JSON-specifikationen, att beskrivningstexten kan överensstämma med JSON-utdata och hjälper till att minska de redundanta beskrivningarna. Example här är hämtad från dhcp6 reläkonfiguration.
Hyperlänk i källan file
Tilldela hjälpen file plats i dess källa file HTML tag. Det fasta variabelnamnet "help_page" används för web hjälpsida tilldelning.
- // Hjälpsida magi
- var help_page = “/help/help_xxx.htm”;
Uppdatera HTML-fältbeskrivning från JSON-specifikationen
- Använda sig av eller HTML tag att deklarera HTML-tabellbeskrivningen och ges ett unikt ID för tag.
- När HTML-dokumentet är klart, anrop loadXMLDoc() för att få hela JSON-specifikationen eller få den specifika metodbeskrivningen av JSON-metodnamnet "jsonRpc.status.introspection.specific.inventory.get".
- ProcessTableDesc() används för att uppdatera tabellbeskrivningen och processUpdate() används för att uppdatera tabellparameterbeskrivningen.
- I processUpdate(), anrop updateTableParamsDesc() för att uppdatera JSON-elementen som matchar de specifika elementnamnen.
- Uppdatera eller tag inre HTML enligt elementbeskrivningen.
- /* Uppdatera HTML-beskrivningsfält */
- function processTableDesc(req) {
- if (!req.responseText) {
- återvända;
- }
- var json_spec = JSON.decode(req.responseText);
- // Uppdatera tabellbeskrivning
- $(“TableDesc”).innerHTML = getJsonSpecElement(json_spec, “groups”, “dhcp6_relay.config.vlan”).description;
- }
- /* Uppdatera HTML-tabellparameterbeskrivning */
- function processUpdate(recv_json) {
- // Uppdatera tabellparameterbeskrivning
- var param_names = [
- {
- "alias": "Gränssnitt",
- "type": "vtss_ifindex_t",
- "name": "vlanInterface",
- "suffix": "."
- },
- {
- "alias": "Relägränssnitt",
- "type": "vtss_ifindex_t",
- "name": "relayVlanInterface",
- "suffix": ". Id för gränssnittet som används för vidarebefordran."
- },
- {
- "alias": "Relädestination",
- "type": "mesa_ipv6_t",
- "name": "relay_destination",
- "suffix": ". IPv6-adressen för DHCPv6-servern som begär ska vidarebefordras till. Standardvärdet 'ff05::1:3' anger 'valfri DHCP-server'."
- }
- ];
- updateTableParamsDesc(“TableParamsDesc”, recv_json, “dhcp6_relay.config.vlan.get”, param_names);
- }
- /* Hämta JSON-specifikation */
- window.addEvent('domready', function () {
- loadXMLDoc(“/json_spec”, processTableDesc);
- requestJsonDoc(“jsonRpc.status.introspection.specific.inventory.get”, “dhcp6_relay.config.vlan”, processUpdate);
- });
Hyperlänk i menyraden
- HTML-källkoden för menyraden genereras från file webstax2\vtss_appl\web\ menu_default.cxx.
- Redigera objekten i denna file för Web sidans hyperlänk.
- #if defined(VTSS_SW_OPTION_DHCP6_RELAY)
- ITEM(” Relay,dhcp6_relay.htm”);
- #endif //VTSS_SW_OPTION_DHCP6_RELAY
NOTERA
Lägg märke till att antalet blanksteg i ITEM(“”), som används för att bestämma gruppnivån i menyraden. I det här fallet, alla web sidorna finns under gruppen "DHCPv6".
Figur 6. Example av globalt konfigurerad tabell
Bilaga
Typisk web sidor
Det finns flera typiska web sidor kan användas för referensdesignen. Ytterligare ett exampDen som ska visas här är konfigurationen av en enstaka spegelsession som finns i vtss_appl\mirror\html\mirror.htm.
De web sidan ger den detaljerade konfigurationen för en enda spegelsession. Alla konfigurerade parametrar listas.
- Klicka på "Spara"-knappen för att tillämpa den aktuella konfigurationen.
- Klicka på knappen "Återställ" för att återställa den aktuella konfigurationen.
- Klicka på "Avbryt" för att återgå till övergångenview av spegelsessioner
Spegel&RMSpegelkonfiguration
Globala inställningar
Käll-VLAN-konfiguration
Portkonfiguration
Figur 7. Exampdel av detaljerad konfiguration av spegelsessionen
Knapparna "Spara", "Återställ" och "Avbryt" läggs till av html-koden:
JSON kommandoflöde
Den här sidan kräver ett kommandoflöde i två steg:
- Först måste den få enhetens funktioner med metoden "mirror.capabilities.get". Möjligheterna ändras inte och behöver bara läsas en gång.
- Sedan måste den få den aktuella konfigurationen av enheten med metoderna "mirror.config.session.get", "port.status.get" och i händelse av stackning "topo.config.stacking.get".
Anropet av "mirror.capabilities.get" initieras av "domready"-händelsen och resultatet är konfigurerat för att hanteras av funktionen requestUpdate.
requestUpdate kommer att initiera anropet av "mirror.config.session.get",
"port.status.get" och i händelse av stackning "topo.config.stacking.get" och resultaten av dessa anrop är konfigurerade för att hanteras av funktionen prepareUpdate.
Funktionen prepareUpdate kommer att samla in alla resultat, och först när alla har tagits emot kommer den att anropa funktionen processUpdate som kommer att konstruera tabellerna som ska visas på web.
Referenser
- Wikipedia JavaScript https://en.wikipedia.org/wiki/JavaScript
- JSON https://www.json.org/
- MoonTools https://mootools.net/
Dokument/resurser
![]() |
Microsemi AN1256 Web Programmerare ansökan [pdf] Användarhandbok AN1256, AN1256 Web Programmerare applikation, Web Programmerare Application, Application |