{"id":2284,"date":"2022-12-12T14:58:19","date_gmt":"2022-12-12T13:58:19","guid":{"rendered":"https:\/\/www.armonie.group\/ibm-i-sottofili-dinamici\/"},"modified":"2023-10-03T10:35:29","modified_gmt":"2023-10-03T08:35:29","slug":"ibm-i-sottofili-dinamici","status":"publish","type":"post","link":"https:\/\/www.armonie.group\/it\/ibm-i-sottofili-dinamici\/","title":{"rendered":"IBM i : Sottofili dinamici"},"content":{"rendered":"[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.14.8&#8243; background_color=&#8221;#0c8dc9&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;3.25&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.25&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text _builder_version=&#8221;4.14.8&#8243; text_font_size=&#8221;20px&#8221; header_font=&#8221;Poppins|700|||||||&#8221; header_text_align=&#8221;center&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_font_size=&#8221;43px&#8221; header_2_font=&#8221;Poppins||||||||&#8221; header_2_text_align=&#8221;center&#8221; header_2_text_color=&#8221;#01013A&#8221; background_color=&#8221;RGBA(255,255,255,0)&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_margin=&#8221;||-16px||false|false&#8221; custom_padding=&#8221;30px|30px||30px|false|false&#8221; global_colors_info=&#8221;{}&#8221;]<h2><b>Blog ID-INFO<\/b><\/h2>\n<p><strong><\/strong><\/p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.14.8&#8243; text_font_size=&#8221;20px&#8221; header_font=&#8221;Poppins|700|||||||&#8221; header_text_align=&#8221;center&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_font_size=&#8221;43px&#8221; background_color=&#8221;RGBA(255,255,255,0)&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_padding=&#8221;30px|30px|30px|30px|false|false&#8221; global_colors_info=&#8221;{}&#8221;]<h2 class=\"post_link\">IBM i: sottofili dinamici<\/h2>\n<p><strong><!-- \/wp:post-content --><\/strong><\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;3.22&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;3.25&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.25&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text _builder_version=&#8221;4.14.8&#8243; text_text_color=&#8221;#000000&#8243; text_font_size=&#8221;13px&#8221; text_line_height=&#8221;1.4em&#8221; background_color=&#8221;rgba(13,189,224,0.39)&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_padding=&#8221;30px|30px|30px|30px|false|false&#8221; global_colors_info=&#8221;{}&#8221;]<p class=\"wsc_post_summary\"><strong>Avrete letto il nostro precedente articolo sui sottofili statici. Diamo un&#8217;occhiata alla versione &#8220;Dinamica&#8221;.<\/strong><\/p>\n<p><strong><!-- \/wp:paragraph --><\/strong><\/p>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.14.8&#8243; _module_preset=&#8221;default&#8221; text_text_color=&#8221;#000000&#8243; header_2_font=&#8221;Poppins||||||||&#8221; header_2_text_color=&#8221;#000000&#8243; header_3_font=&#8221;Poppins|300|||||||&#8221; header_3_text_color=&#8221;#000000&#8243; global_colors_info=&#8221;{}&#8221;]<p>Gli attuali servizi Web si basano sull&#8217;Hypertext Transfer Protocol (HTPP) per la trasmissione delle informazioni. L&#8217;utilizzo di questo standard ha l&#8217;enorme vantaggio di evitare un gran numero di problemi di connettivit\u00e0 tra le nostre due applicazioni.<\/p>\n<p>I servizi Web si basano su scambi client\/server. In pratica, l&#8217;applicazione che fornisce il servizio (spesso definita &#8220;exposing&#8221;) \u00e8 in ascolto di tutte le richieste fatte dai clienti. La richiesta viene interpretata dal server, elaborata e quindi la risposta viene inviata all&#8217;applicazione client in una forma che il client pu\u00f2 comprendere.<\/p>\n<p>&nbsp;<\/p>\n<p>Esistono due famiglie principali di servizi web:<\/p>\n<ul>\n<li>Servizi web SOAP: protocollo semplice di accesso agli oggetti<\/li>\n<li>Servizi web REST: trasferimento di stato rappresentativo<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>I primi si basano sull&#8217;omonimo protocollo. Si tratta di un sistema che esiste da molto tempo: la versione iniziale definita da Microsoft e iBM risale a 23 anni fa, per poi diventare uno standard in seguito a una raccomandazione del W3C. Il protocollo si basa interamente sul linguaggio XML per descrivere formalmente gli scambi tra client e server. Questo formalismo (tramite documenti XML chiamati WSDL) ha il vantaggio di fornire una documentazione implicita quando si utilizza questo tipo di servizio. Purtroppo, la famiglia soffre di alcuni inconvenienti: il linguaggio XML \u00e8 particolarmente prolisso, quindi l&#8217;utilizzo di questo tipo di servizio web pu\u00f2 diventare rapidamente complicato. D&#8217;altra parte, il formalismo implica che i client e il server siano fortemente accoppiati, il che, in un approccio SOA in cui siamo sempre alla ricerca di una maggiore flessibilit\u00e0, non \u00e8 necessariamente auspicabile.<\/p>\n<p>&nbsp;<\/p>\n<p>Questi inconvenienti hanno portato alla nascita della famiglia di servizi web REST. Si basano sui concetti architettonici utilizzati nel Web per manipolare risorse remote in forma di testo. A differenza dei servizi web SOAP, la famiglia dei servizi web REST non si limita al formato XML per lo scambio di informazioni tra applicazioni client\/server: formati come JSON sono ora comunemente utilizzati. Per manipolare risorse remote, questi servizi web utilizzano i metodi http : POST, GET, PUT, DELETE, &#8230; che riprendono il modello di sviluppo CRUD, il che spiega perch\u00e9 questi servizi web sono spesso utilizzati per costruire API (Application Programming Interface) complete per interagire con gli elementi di un&#8217;applicazione.<\/p>\n<p>&nbsp;<\/p>\n<p>Ma che dire del nostro IBM i? Pu\u00f2 anch&#8217;essa inserirsi in questi ambienti distribuiti?<\/p>\n<p>&nbsp;<\/p>\n<p>Permettetemi di rassicurarvi subito: la nostra piattaforma preferita dispone di una vasta gamma di strumenti per esporre o consumare servizi web. Come molte altre piattaforme, possiamo implementare questi servizi in vari modi e metterli a disposizione dei nostri clienti.<\/p>\n<p>&nbsp;<\/p>\n<p>Per illustrare il nostro punto di vista, prendiamo un&#8217;applicazione esistente sviluppata in RPGIV.<\/p>\n<p>&nbsp;<\/p>\n<p>Per farlo, iniziamo a creare un ambiente con alcune tabelle e dati. Fortunatamente, IBM ci ha fornito una stored procedure SQL di una sola riga per questo scopo:<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td><strong>CHIAMARE QSYS.CREATE_SQL_SAMPLE(&#8216;RHDB&#8217;);<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Apriamo quindi il nostro strumento di esecuzione di script SQL in ACS e iniziamo.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1_1.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Come si pu\u00f2 intuire dal nome della raccolta creata, lavoreremo con i dati delle risorse umane.<\/p>\n<p>&nbsp;<\/p>\n<p>Una rapida occhiata al database explorer mostra le tabelle che sono state create.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/2_1.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Esaminiamo la tabella EMPLOYEE e scriviamo un piccolo programma per recuperare le informazioni su un dipendente.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/3fff.jpg\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Supponiamo di avere un programma di servizio che estrae informazioni su un dipendente.<\/p>\n<pre><code>      \/if not defined(IMPORT_PROTOTYPES)<\/code> <code>        ctl-opt option ( *nodebugio : *srcstmt )<\/code> <code>          debug<\/code> <code>          nomain<\/code> <code>          pgminfo<\/code><code>(<\/code><code>*PCML<\/code><code> <\/code><code>:<\/code><code> <\/code><code>*MODULE<\/code><code>);<\/code> <code>      * Parametres SQL.<\/code> <code>        exec sql<\/code> <code>          set option commit <\/code><code>=<\/code><code> <\/code><code>*none,<\/code> <code>                     closqlcsr<\/code><code> =<\/code><code> *endmod<\/code><code>;<\/code><code>\n\n<\/code><code>      *======================================================================= *<\/code> <code>      *                                                                        *<\/code> <code>      * ATTENTION :                                                            *<\/code> <code>      *                                                                        *<\/code> <code>      * ---------------------------------------------------------------------- *<\/code> <code>      * FONCTION     : Module RH.                                              *<\/code> <code>      * DESCRIPTION  : Manipulation don\u00e9nes du personnel.                      *<\/code> <code>      *                                                                        *<\/code> <code>      * Creation ... : 25\/10\/2021   par  L. KIEFFER (Notos-Id Info)            *<\/code> <code>      * ---------------------------------------------------------------------- *<\/code> <code>      * Modification :                                                         *<\/code> <code>      * JJ\/MM\/AAAA - XXXXXX XXXXXXX - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.     *<\/code> <code>      *                                                                        *\n      * ---------------------------------------------------------------------- *<\/code> <code>      \/endif<\/code> <code>      *----------------------------------------------------------------------<\/code> <code>      * Prototype verification sous systeme.<\/code> <code>      * ---------------------------------------------------------------------<\/code> <code>        \/\/ Information employ\u00e9.<\/code> <code>        dcl-ds MODULERH_employe template qualified;<\/code> <code>           prenom varchar(12);<\/code> <code>           nom varchar(15);<\/code> <code>           service varchar(36);<\/code> <code>        end-ds;<\/code> <code>        \/\/ Recherche d'un employ\u00e9.<\/code> <code>        dcl-pr MODULERH_rchEmp;<\/code> <code>          iNumEmp char( 6 ) const;<\/code> <code>          oInfEmp likeds ( MODULERH_employe );<\/code> <code>          oErrHTTP int(5);<\/code> <code>          oErrMsg varchar(40);<\/code> <code>        end-pr<\/code><code>;<\/code> <code>      * Fin des elements exportes.<\/code> <code>      \/if defined(IMPORT_PROTOTYPES)<\/code> <code>      \/eof<\/code> <code>      \/endif<\/code> <code>      *----------------------------------------------------------------------<\/code> <code>      * Declarations globales<\/code> <code>      * ---------------------------------------------------------------------<\/code> <code>      \/\/ ---------------------------------------------------------------------<\/code> <code>      \/\/ Recherche d'employ\u00e9.<\/code> <code>      \/\/ ---------------------------------------------------------------------<\/code> <code>        dcl-proc MODULERH_rchEmp export;<\/code> <code>          dcl-pi *n;<\/code> <code>            iNumEmp char( 6 ) const;<\/code> <code>            oInfEmp likeds ( MODULERH_employe );<\/code> <code>            oErrHTTP int(5);<\/code> <code>            oErrMsg varchar(40);<\/code> <code>          end-pi<\/code><code>;<\/code> <code>          \/\/ Recherche de l'employ\u00e9.<\/code> <code>          exec sql<\/code> <code>            Select FIRSTNME, LASTNAME, DEPTNAME<\/code> <code>            into :oInfEmp.prenom, :oInfEmp.nom, :oInfEmp.service<\/code> <code>            From EMPLOYEE<\/code> <code>            Join DEPARTMENT on DEPTNO = WORKDEPT<\/code> <code>            Where EMPNO = :iNumEmp;<\/code> <code>          if sqlCode &lt; 0;<\/code> <code>            oErrHTTP = 500;<\/code> <code>            oErrMsg = 'Erreur recherche de l''employ\u00e9.';<\/code> <code>            return;<\/code> <code>          endif;<\/code> <code>          if sqlCode = 100;<\/code> <code>            oErrHTTP = 404;<\/code> <code>            oErrMsg = 'Employ\u00e9 inconnu.';<\/code> <code>            return;<\/code> <code>          endif;<\/code> <code>          \/\/ Tout s'est bien pass\u00e9.<\/code> <code>          oErrHTTP = 200;<\/code> <code>          oErrMsg = *blanks;<\/code> <code>          return;<\/code> <code>        end-proc;<\/code><code>\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Notate le istruzioni evidenziate, su cui torneremo pi\u00f9 avanti quando spiegheremo il nostro servizio web.<\/p>\n<p>&nbsp;<\/p>\n<p>Per continuare, avremo bisogno di un server di servizi web su cui ospitare i nostri servizi. Fortunatamente per noi, IBM ne fornisce uno su IBM i: IWS (Integrated Web Services server).<\/p>\n<p>Per accedervi, utilizzare il seguente URL: http: <a href=\"http:\/\/mon_ibm_i:2001\/HTTPAdmin\">\/\/mon_ibm_i:2001\/HTTPAdmin<\/a><\/p>\n<p>Dove my_ibm_i \u00e8 l&#8217;indirizzo IP della partizione o il suo nome DNS.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<p><strong>AVVERTENZA <\/strong>: se la pagina non viene visualizzata, \u00e8 probabile che l&#8217;applicazione di amministrazione web non sia stata avviata correttamente.<\/p>\n<p>Eseguire il seguente comando sulla riga di comando del 5250:<\/p>\n<p>&nbsp;<\/p>\n<p><strong>STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Identificarsi utilizzando un profilo con diritti <strong>*IOSYSCFG<\/strong>.<\/p>\n<p><strong><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/Image%2044.jpg\" alt=\"\"><\/strong><\/p>\n<p>Nella nuova pagina visualizzata, fate clic sul collegamento &#8220;Create Web Services Server&#8221; e lasciatevi guidare dalla procedura guidata.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2055.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Assegnate al vostro server il nome che desiderate. Per impostazione predefinita, verr\u00e0 creata un&#8217;istanza di Apache.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2066.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Selezionare le porte utilizzate dal server.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%2077.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>\u00c8 possibile personalizzare il lavoro del server fornendogli un jobd specifico.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image88.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>\u00c8 inoltre possibile scegliere il profilo utente utilizzato dal lavoro del server. Ricordate di definirlo chiaramente. Una buona idea \u00e8 quella di impostare questo profilo sul profilo del proprietario del database che si intende manipolare. Se si sceglie l&#8217;utente predefinito QWSERVICE, \u00e8 necessario assegnargli una password.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image99.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Infine, confermare la creazione del server facendo clic sul pulsante &#8220;Fine&#8221;.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image%20100.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Ora che abbiamo un server, parliamo del nostro primo servizio. A tal fine, selezionare il server creato in precedenza e fare clic sul collegamento &#8220;Manage Deployed Service&#8221;.<\/p>\n<p>Fare clic sul pulsante &#8220;Gestisci servizio distribuito&#8221;. Quindi fare clic sul pulsante &#8220;Deploy&#8221;.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/111.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La prima pagina della procedura guidata consente di selezionare l&#8217;eseguibile che implementa il servizio. Dalla V7.3, \u00e8 possibile utilizzare anche il linguaggio sql per implementare il servizio.<\/p>\n<p>Per le implementazioni RPG IV, \u00e8 possibile selezionare solo i componenti eseguibili (programmi e programmi di servizio). Nel nostro caso, scegliamo il programma di assistenza MODULERH.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image222.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La schermata successiva ci permetter\u00e0 di scegliere il nome della risorsa. Nel nostro caso, lo chiameremo &#8220;employes&#8221; perch\u00e9 stiamo manipolando i dati dei dipendenti.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/333.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La pagina seguente consente di limitare l&#8217;accesso al servizio web a una porta sicura (tramite SSL). Poich\u00e9 non abbiamo messo in sicurezza il nostro server http, rispondiamo &#8220;No&#8221;.<\/p>\n<p>Possiamo anche richiedere l&#8217;autenticazione per questo servizio web.<\/p>\n<p>In questo caso, \u00e8 disponibile solo l&#8217;autenticazione &#8220;di base&#8221;. In questo caso, il cliente dovr\u00e0 fornire un utente e una password validi sul sistema nell&#8217;intestazione http &#8220;Authorization&#8221;.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image444.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Il passo successivo, nel caso di programmi di servizio, consente di selezionare la procedura esportata che implementa il servizio (in questo caso modulerh_rchemp).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image555.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>L&#8217;assistente chieder\u00e0 quindi come comunicare al cliente che il servizio \u00e8 stato eseguito come previsto o con un errore. Qui \u00e8 possibile modificare i codici di ritorno e i messaggi di errore predefiniti.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/image666.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La pagina successiva \u00e8 la pi\u00f9 importante. Descrive come i clienti accederanno al vostro servizio.<\/p>\n<p>Possiamo definire :<\/p>\n<ul>\n<li>Il verbo http utilizzato (in questo caso GET)<\/li>\n<li>Il modello di url utilizzato per l&#8217;accesso<\/li>\n<\/ul>\n<p>Questo ci permette di definire la posizione dei nostri parametri quando vengono forniti direttamente nell&#8217;URL. La sintassi da utilizzare \u00e8:<strong> \/{nom_parametre}<\/strong><\/p>\n<p>Si noti che \u00e8 possibile aggiungere alla sintassi anche un&#8217;espressione regolare per verificare la validit\u00e0 del parametro inserito (qui \\d+ per una stringa numerica di almeno una cifra).<\/p>\n<ul>\n<li>Una variabile di uscita utilizzata per restituire il codice http (deve essere definita come un numero intero nell&#8217;RPG che implementa il servizio).<\/li>\n<li>Una variabile di output alfanumerica che sostituisce il messaggio di errore predefinito.<\/li>\n<li>I tipi di dati accettati come input (*Tutti corrisponde a tutti i tipi gestiti: xml, json, dati dei moduli, ecc. =&gt; in questo caso, il client deve specificare quale tipo di informazione sta fornendo in modo che il server la comprenda).<\/li>\n<li>Tipi di dati restituiti: lo strumento pu\u00f2 restituire dati in formato xml o json. Ancora una volta, se il server \u00e8 in grado di fornirli entrambi, il client dovr\u00e0 specificare quale preferisce.<\/li>\n<li>Come vengono presentati i dati di ingresso e di uscita: incapsulati o con nome.<\/li>\n<\/ul>\n<p>Infine, questa schermata consente di indicare da dove verranno recuperati i parametri di input. Nel nostro caso, l&#8217;url utilizza l&#8217;identificatore num (ricordate che \u00e8 quello definito nel modello url).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/777.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La schermata successiva consente di definire un utente specifico per l&#8217;esecuzione del servizio web. Il profilo generale del server deve avere accesso a questo profilo specifico di servizio web.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/888.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La schermata successiva serve a definire le librerie da aggiungere all&#8217;ambiente di runtime.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/999.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>La penultima schermata consente di configurare gli elementi da passare al programma che implementa il servizio.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1000.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>L&#8217;ultima schermata riassume le informazioni inserite. Fare clic sul pulsante &#8220;Fine&#8221; per distribuire e avviare il servizio Web.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/1010.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Ma come si fa a testare il nostro famoso servizio web?<\/p>\n<p>Il servizio web utilizza il verbo GET, quindi un semplice browser ci permetter\u00e0 di testarlo.<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/2020.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Per i casi pi\u00f9 complessi, \u00e8 possibile rivolgersi a strumenti pi\u00f9 completi come :<\/p>\n<ul>\n<li>CURL (se non si hanno problemi con le righe di comando): consente di configurare completamente la richiesta (autenticazione, intestazioni http, ecc.).<\/li>\n<li>PostMan: strumento grafico altrettanto completo di CURL.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Un rapido esempio utilizzando PostMan: aggiungiamo un&#8217;intestazione http che indica che vogliamo solo JSON per la risposta (ricordiamo che il nostro servizio web pu\u00f2 fornire xml o json).<\/p>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/www.notos.fr\/Portals\/0\/3030.png\" alt=\"\"><\/p>\n<p>&nbsp;<\/p>\n<p>Ecco fatto, la &#8216;R&#8217; della nostra API CRUD \u00e8 ora al suo posto, non resta che creare le altre procedure che implementano le funzioni mancanti. Non dimenticate l&#8217;importanza dei verbi http quando impostate tutto questo:<\/p>\n<p>C =&gt; POST<\/p>\n<p>R =&gt; LETTURA<\/p>\n<p>U =&gt; PUT<\/p>\n<p>E D =&gt; DELETE.<\/p>\n<p>&nbsp;<\/p>\n<p>Spero che questo post abbia chiarito un po&#8217; l&#8217;argomento. Ci vediamo la prossima volta, quando saremo in grado di proiettarci nei panni del cliente e non in quelli del server.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Avete domande sui servizi web o sulla vostra piattaforma IBM i? Allora contattateci al numero 01 88 32 12 34 o tramite il <a href=\"https:\/\/www.idinfo.eu\/CONTACT\" target=\"-blank\" rel=\"noopener\">modulo di contatto<\/a>.<\/strong><\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<!-- \/wp:freeform -->","protected":false},"excerpt":{"rendered":"<p>Blog ID-INFO IBM i: sottofili dinamici Avrete letto il nostro precedente articolo sui sottofili statici. Diamo un&#8217;occhiata alla versione &#8220;Dinamica&#8221;. Gli attuali servizi Web si basano sull&#8217;Hypertext Transfer Protocol (HTPP) per la trasmissione delle informazioni. L&#8217;utilizzo di questo standard ha l&#8217;enorme vantaggio di evitare un gran numero di problemi di connettivit\u00e0 tra le nostre due [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2285,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[88,89],"tags":[109,94,92,96,93,111,95,106,110,113,112,108,107],"class_list":["post-2284","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-notizie","category-notos-it","tag-applicazione","tag-as-400-it","tag-as400-it","tag-ibm-power-it","tag-ibmi-it","tag-programma","tag-server-di-potenza","tag-servizio-web","tag-sistema-informativo","tag-sotto-file","tag-sottofascicolo-dinamico","tag-sviluppatore","tag-sviluppo"],"_links":{"self":[{"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/posts\/2284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/comments?post=2284"}],"version-history":[{"count":2,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/posts\/2284\/revisions"}],"predecessor-version":[{"id":2288,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/posts\/2284\/revisions\/2288"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/media\/2285"}],"wp:attachment":[{"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/media?parent=2284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/categories?post=2284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.armonie.group\/it\/wp-json\/wp\/v2\/tags?post=2284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}