{"id":231,"date":"2020-08-11T13:07:16","date_gmt":"2020-08-11T13:07:16","guid":{"rendered":"https:\/\/www.smtp-server.net\/?p=231"},"modified":"2020-08-04T19:57:22","modified_gmt":"2020-08-04T19:57:22","slug":"universel-smtp-server-hvorfor-webtjenester","status":"publish","type":"post","link":"https:\/\/www.smtp-server.net\/da\/universel-smtp-server-hvorfor-webtjenester\/","title":{"rendered":"Universal SMTP Server - Hvorfor webservices?"},"content":{"rendered":"<p><b>Oversigt<\/b><br \/>\nKomponentbaseret programmering er blevet mere popul\u00e6rt end nogensinde. Der bliver n\u00e6sten ikke bygget et program i dag, som ikke involverer komponenter i en eller anden form, som regel fra forskellige leverand\u00f8rer. Efterh\u00e5nden som programmerne er blevet mere sofistikerede, er behovet for at udnytte komponenter, der er distribueret p\u00e5 eksterne maskiner, ogs\u00e5 vokset.<\/p>\n<p><!--more--><\/p>\n<p>Et eksempel p\u00e5 en komponentbaseret applikation er en end-to-end e-handelsl\u00f8sning. En e-handelsapplikation, der ligger p\u00e5 en webfarm, skal sende ordrer til en back-end Enterprise Resource Planning (ERP)-applikation. I mange tilf\u00e6lde ligger ERP-applikationen p\u00e5 en anden hardware og k\u00f8rer m\u00e5ske p\u00e5 et andet operativsystem.<\/p>\n<p>Microsofts Distributed Component Object Model (DCOM), en infrastruktur for distribuerede objekter, der g\u00f8r det muligt for et program at kalde Component Object Model (COM)-komponenter, der er installeret p\u00e5 en anden server, er blevet overf\u00f8rt til en r\u00e6kke ikke-Windows-platforme. Men DCOM har aldrig vundet bred accept p\u00e5 disse platforme, s\u00e5 det bruges sj\u00e6ldent til at lette kommunikationen mellem Windows- og ikke-Windows-computere. ERP-softwareleverand\u00f8rer skaber ofte komponenter til Windows-platformen, som kommunikerer med back-end-systemet via en propriet\u00e6r protokol.<\/p>\n<p>Nogle af de tjenester, som en e-handelsapplikation benytter sig af, ligger m\u00e5ske slet ikke i datacentret. Hvis e-handelsapplikationen f.eks. accepterer kreditkortbetaling for varer, som kunden har k\u00f8bt, skal den bruge den handlende banks tjenester til at behandle kundens kreditkortoplysninger. Men i praksis er DCOM og besl\u00e6gtede teknologier som CORBA og Java RMI begr\u00e6nset til applikationer og komponenter, der er installeret i virksomhedens datacenter. To prim\u00e6re \u00e5rsager til dette er, at disse teknologier som standard anvender propriet\u00e6re protokoller, og at disse protokoller i sagens natur er forbindelsesorienterede.<\/p>\n<p>Klienter, der kommunikerer med serveren via internettet, st\u00e5r over for mange potentielle barrierer for at kommunikere med serveren. Sikkerhedsbevidste netv\u00e6rksadministratorer over hele verden har implementeret virksomhedsroutere og firewalls for at afvise praktisk talt enhver form for kommunikation over internettet. Det kr\u00e6ver ofte en Guds handling at f\u00e5 en netv\u00e6rksadministrator til at \u00e5bne porte ud over det absolutte minimum.<\/p>\n<p>Hvis du er heldig nok til at f\u00e5 en netv\u00e6rksadministrator til at \u00e5bne de relevante porte til at underst\u00f8tte din tjeneste, er der gode chancer for, at dine klienter ikke er lige s\u00e5 heldige. Derfor er propriet\u00e6re protokoller som dem, der bruges af DCOM, CORBA og Java RMI, ikke praktiske i internetscenarier.<\/p>\n<p>Det andet problem med disse teknologier er som sagt, at de i sagens natur er forbindelsesorienterede og derfor ikke kan h\u00e5ndtere netv\u00e6rksafbrydelser p\u00e5 en elegant m\u00e5de. Fordi internettet ikke er under din direkte kontrol, kan du ikke g\u00f8re nogen antagelser om forbindelsens kvalitet eller p\u00e5lidelighed. Hvis der opst\u00e5r en netv\u00e6rksafbrydelse, kan det n\u00e6ste opkald, klienten foretager til serveren, mislykkes.<\/p>\n<p>Den forbindelsesorienterede karakter af disse teknologier g\u00f8r det ogs\u00e5 udfordrende at opbygge de belastningsbalancerede infrastrukturer, der er n\u00f8dvendige for at opn\u00e5 h\u00f8j skalerbarhed. N\u00e5r forbindelsen mellem klienten og serveren er afbrudt, kan man ikke bare sende den n\u00e6ste anmodning videre til en anden server.<\/p>\n<p>Udviklere har fors\u00f8gt at overvinde disse begr\u00e6nsninger ved at udnytte en model, der hedder<i> tilstandsl\u00f8s <\/i><i>Programmering<\/i>, men de har haft begr\u00e6nset succes, fordi teknologierne er ret tunge og g\u00f8r det dyrt at genoprette en forbindelse med et fjerntliggende objekt.<\/p>\n<p>Da behandlingen af en kundes kreditkort udf\u00f8res af en fjernserver p\u00e5 internettet, er DCOM ikke ideel til at lette kommunikationen mellem e-handelsklienten og kreditkortsbehandlingsserveren. Ligesom i en ERP-l\u00f8sning installeres der ofte en tredjepartskomponent i klientens datacenter (i dette tilf\u00e6lde af udbyderen af kreditkortbehandlingen). Denne komponent fungerer som lidt mere end en proxy, der letter kommunikationen mellem e-handelssoftwaren og den handlende bank via en propriet\u00e6r protokol.<\/p>\n<p>Kan du se et m\u00f8nster her? P\u00e5 grund af de eksisterende teknologiers begr\u00e6nsninger, n\u00e5r det g\u00e6lder kommunikation mellem computersystemer, har softwareleverand\u00f8rerne ofte v\u00e6ret n\u00f8dt til at bygge deres egen infrastruktur. Det betyder, at ressourcer, der kunne have v\u00e6ret brugt til at tilf\u00f8je forbedret funktionalitet til ERP-systemet eller kreditkortsystemet, i stedet er blevet brugt til at skrive propriet\u00e6re netv\u00e6rksprotokoller.<\/p>\n<p>I et fors\u00f8g p\u00e5 bedre at underst\u00f8tte s\u00e5danne internetscenarier valgte Microsoft oprindeligt at udvide sine eksisterende teknologier, herunder COM Internet Services (CIS), som g\u00f8r det muligt at etablere en DCOM-forbindelse mellem klienten og fjernkomponenten via port 80. Af forskellige \u00e5rsager blev CIS ikke bredt accepteret.<\/p>\n<p>Det blev klart, at der var brug for en ny tilgang. S\u00e5 Microsoft besluttede at l\u00f8se problemet nedefra og op. Lad os se p\u00e5 nogle af de krav, l\u00f8sningen skulle opfylde for at blive en succes.<\/p>\n<ul>\n<li><b>Interoperabilitet<\/b> Fjerntjenesten skal kunne bruges af klienter p\u00e5 andre platforme.<\/li>\n<li><b>Internet-venlighed<\/b> L\u00f8sningen b\u00f8r fungere godt til at underst\u00f8tte klienter, der f\u00e5r adgang til fjerntjenesten fra internettet.<\/li>\n<li><b>St\u00e6rkt typede gr\u00e6nseflader<\/b> Der b\u00f8r ikke v\u00e6re nogen tvetydighed om typen af data, der sendes til og modtages fra en fjerntjeneste. Desuden b\u00f8r datatyper, der er defineret af fjernservicen, passe rimeligt godt til datatyper, der er defineret af de fleste procedurale programmeringssprog.<\/li>\n<li><b>Evne til at udnytte eksisterende internetstandarder<\/b> Implementeringen af fjernservicen b\u00f8r udnytte eksisterende internetstandarder s\u00e5 meget som muligt og undg\u00e5 at genopfinde l\u00f8sninger p\u00e5 problemer, der allerede er l\u00f8st. En l\u00f8sning, der bygger p\u00e5 bredt vedtagne internetstandarder, kan udnytte eksisterende v\u00e6rkt\u00f8jss\u00e6t og produkter, der er skabt til teknologien.<\/li>\n<li><b>Underst\u00f8ttelse af alle sprog<\/b> L\u00f8sningen b\u00f8r ikke v\u00e6re t\u00e6t koblet til et bestemt programmeringssprog. Java RMI er f.eks. t\u00e6t koblet til Java-sproget. Det ville v\u00e6re sv\u00e6rt at p\u00e5kalde funktionalitet p\u00e5 et eksternt Java-objekt fra Visual Basic eller Perl. En klient skal kunne implementere en ny webtjeneste eller bruge en eksisterende webtjeneste, uanset hvilket programmeringssprog klienten er skrevet i.<\/li>\n<li><b>Underst\u00f8ttelse af enhver distribueret komponentinfrastruktur<\/b> L\u00f8sningen b\u00f8r ikke v\u00e6re t\u00e6t koblet til en bestemt komponentinfrastruktur. Faktisk b\u00f8r det ikke v\u00e6re n\u00f8dvendigt at k\u00f8be, installere eller vedligeholde en infrastruktur for distribuerede objekter, bare for at bygge en ny fjernservice eller bruge en eksisterende service. De underliggende protokoller skal muligg\u00f8re et grundl\u00e6ggende kommunikationsniveau mellem eksisterende infrastrukturer for distribuerede objekter som DCOM og CORBA.<\/li>\n<\/ul>\n<p>I betragtning af titlen p\u00e5 denne bog b\u00f8r det ikke komme som nogen overraskelse, at den l\u00f8sning, Microsoft skabte, er kendt som<i> Webtjenester<\/i>. En webtjeneste udstiller en gr\u00e6nseflade til at p\u00e5kalde en bestemt aktivitet p\u00e5 vegne af klienten. En klient kan f\u00e5 adgang til webservicen gennem brug af internetstandarder.<\/p>\n<p><b>Byggeklodser til webservices<\/b><br \/>\nF\u00f8lgende grafik viser de centrale byggesten, der er n\u00f8dvendige for at muligg\u00f8re fjernkommunikation mellem to applikationer.<\/p>\n<p>Lad os diskutere form\u00e5let med hver af disse byggesten. Da mange l\u00e6sere er fortrolige med DCOM, vil jeg ogs\u00e5 n\u00e6vne DCOM-\u00e6kvivalenten for hver byggesten.<\/p>\n<ul>\n<li><b>Opdagelse<\/b> Den klientapplikation, der har brug for adgang til en webtjenestes funktionalitet, skal kunne finde frem til fjerntjenestens placering. Dette opn\u00e5s gennem en proces, der generelt kaldes<i> opdagelse<\/i>. Opdagelse kan g\u00f8res lettere via en central mappe s\u00e5vel som ved mere ad hoc-metoder. I DCOM leverer Service Control Manager (SCM) opdagelsestjenester.<\/li>\n<li><b>Beskrivelse<\/b> N\u00e5r slutpunktet for en bestemt webtjeneste er fundet, har klienten brug for tilstr\u00e6kkelig information til at kunne interagere korrekt med den. Beskrivelsen af en webtjeneste omfatter strukturerede metadata om den gr\u00e6nseflade, der er beregnet til at blive brugt af en klientapplikation, samt skriftlig dokumentation om webtjenesten, herunder eksempler p\u00e5 brug. En DCOM-komponent udstiller strukturerede metadata om sine gr\u00e6nseflader via et typebibliotek (typelib). Metadataene i en komponents typelib gemmes i et propriet\u00e6rt bin\u00e6rt format og tilg\u00e5s via en propriet\u00e6r programmeringsgr\u00e6nseflade (API).<\/li>\n<li><b>Beskedens format<\/b> For at kunne udveksle data skal en klient og en server blive enige om en f\u00e6lles m\u00e5de at kode og formatere meddelelserne p\u00e5. En standardiseret m\u00e5de at kode data p\u00e5 sikrer, at data, der er kodet af klienten, bliver fortolket korrekt af serveren. I DCOM formateres meddelelser, der sendes mellem en klient og en server, som defineret i DCOM Object RPC (ORPC)-protokollen.<\/li>\n<\/ul>\n<p>Uden en standardiseret m\u00e5de at formatere meddelelserne p\u00e5 er det n\u00e6sten umuligt at udvikle et v\u00e6rkt\u00f8jss\u00e6t, der abstraherer udvikleren fra de underliggende protokoller. Ved at skabe et abstraktionslag mellem udvikleren og de underliggende protokoller kan udvikleren fokusere mere p\u00e5 det aktuelle forretningsproblem og mindre p\u00e5 den infrastruktur, der kr\u00e6ves for at implementere l\u00f8sningen.<\/p>\n<ul>\n<li><b>Kodning<\/b> De data, der sendes mellem klienten og serveren, skal kodes i meddelelsens br\u00f8dtekst. DCOM bruger et bin\u00e6rt kodningsskema til at serialisere de data, der er indeholdt i de parametre, der udveksles mellem klienten og serveren.<\/li>\n<li><b>Transport<\/b> N\u00e5r meddelelsen er blevet formateret, og dataene er blevet serialiseret i meddelelsens br\u00f8dtekst, skal meddelelsen overf\u00f8res mellem klienten og serveren via en transportprotokol. DCOM underst\u00f8tter en r\u00e6kke propriet\u00e6re protokoller, der er bundet til en r\u00e6kke netv\u00e6rksprotokoller som TCP, SPX, NetBEUI og NetBIOS over IPX.<\/li>\n<\/ul>\n<p><b>Beslutninger om design af webtjenester<\/b><\/p>\n<p>Lad os diskutere nogle af de designbeslutninger, der ligger bag disse byggesten til webtjenester.<\/p>\n<p><b>Choosing Transport Protocols<\/b><\/p>\n<p>The first step was to determine how the client and the server would communicate with each other. The client and the server can reside on the same LAN, but the client might potentially communicate with the server over the Internet. Therefore, the transport protocol must be equally suited to LAN environments and the Internet.<\/p>\n<p>As I mentioned earlier, technologies such as DCOM, CORBA, and Java RMI are ill suited for supporting communication between the client and the server over the Internet. Protocols such as Hypertext Transfer Protocol (HTTP) and Simple Mail Transfer Protocol (SMTP) are proven Internet protocols. HTTP defines a request\/response messaging pattern for submitting a request and getting an associated response. SMTP defines a routable messaging protocol for asynchronous communication. Let&#8217;s examine why HTTP and SMTP are well suited for the Internet.<\/p>\n<p>HTTP-based Web applications are inherently stateless. They do not rely on a continuous connection between the client and the server. This makes HTTP an ideal protocol for high-availability configurations such as firewalls. If the server that handled the client&#8217;s original request becomes unavailable, subsequent requests can be automatically routed to another server without the client knowing or caring.<\/p>\n<p>Almost all companies have an infrastructure in place that supports SMTP. SMTP is well suited for asynchronous communication. If service is disrupted, the e-mail infrastructure automatically handles retries. Unlike with HTTP, you can pass SMTP messages to a local mail server that will attempt to deliver the mail message on your behalf.<\/p>\n<p>The other significant advantage of both HTTP and SMTP is their pervasiveness. Employees have come to rely on both e-mail and their Web browsers, and network administrators have a high comfort level supporting these services. Technologies such as network address translation (NAT) and proxy servers provide a way to access the Internet via HTTP from within otherwise isolated corporate LANs. Administrators will often expose an SMTP server that resides inside the firewall. Messages posted to this server will then be routed to their final destination via the Internet.<\/p>\n<p>In the case of credit card processing software, an immediate response is needed from the merchant bank to determine whether the order should be submitted to the ERP system. HTTP, with its request\/response message pattern, is well suited to this task.<\/p>\n<p>Most ERP software packages are not capable of handling large volumes of orders that can potentially be driven from the e-commerce application. In addition, it is not imperative that the orders be submitted to the ERP system in real time. Therefore, SMTP can be leveraged to queue orders so that they can be processed serially by the ERP system.<\/p>\n<p>If the ERP system supports distributed transactions, another option is to leverage Microsoft Message Queue Server (MSMQ). As long as the e-commerce application and the ERP system reside within the same LAN, connectivity via non-Internet protocols is less of an issue. The advantage MSMQ has over SMTP is that messages can be placed and removed from the queue within the scope of a transaction. If an attempt to process a message that was pulled off the queue fails, the message will automatically be placed back in the queue when the transaction aborts.<\/p>\n<p><b>Choosing an Encoding Scheme<\/b><\/p>\n<p>HTTP and SMTP provide a means of sending data between the client and the server. However, neither specifies how the data within the body of the message should be encoded. Microsoft needed a standard, platform-neutral way to encode data exchanged between the client and the server.<\/p>\n<p>Because the goal was to leverage Internet-based protocols, Extensible Markup Language (XML) was the natural choice. XML offers many advantages, including cross-platform support, a common type system, and support for industry -standard character sets.<\/p>\n<p>Binary encoding schemes such as those used by DCOM, CORBA, and Java RMI must address compatibility issues between different hardware platforms. For example, different hardware platforms have different internal binary representation of multi-byte numbers. Intel platforms order the bytes of a multi-byte number using the little endian convention; many RISC processors order the bytes of a multi-byte number using the big endian convention.<\/p>\n<p>XML avoids binary encoding issues because it uses a text-based encoding scheme that leverages standard character sets. Also, some transport protocols, such as SMTP, can contain only text-based messages.<\/p>\n<p>Binary methods of encoding, such as those used by DCOM and CORBA, are cumbersome and require a supporting infrastructure to abstract the developer from the details. XML is much lighter weight and easier to handle because it can be created and consumed using standard text-parsing techniques.<\/p>\n<p>In addition, a variety of XML parsers are available to further simplify the creation and consumption of XML documents on practically every modern platform. XML is lightweight and has excellent tool support, so XML encoding allows incredible reach because practically any client on any platform can communicate with your Web service.<\/p>\n<p><b>Choosing a Formatting Convention<\/b><\/p>\n<p>It is often necessary to include additional metadata with the body of the message. For example, you might want to include information about the type of services that a Web service needs to provide in order to fulfill your request, such as enlisting in a transaction or routing information. XML provides no mechanism for differentiating the body of the message from its associated data.<\/p>\n<p>Transport protocols such as HTTP provide an extensible mechanism for header data, but some data associated with the message might not be specific to the transport protocol. For example, the client might send a message that needs to be routed to multiple destinations, potentially over different transport protocols. If the routing information were placed into an HTTP header, it would have to be translated before being sent to the next intermediary over another transport protocol, such as SMTP. Because the routing information is specific to the message and not the transport protocol, it should be a part of the message.<\/p>\n<p>Simple Object Access Protocol (SOAP) provides a protocol-agnostic means of associating header information with the body of the message. Every SOAP message must define an envelope. The envelope has a body that contains the payload of the message and a header that can contain metadata associated with the message.<\/p>\n<p>SOAP imposes no restrictions on how the message body can be formatted. This is a potential concern because without a consistent way of encoding the data, it is difficult to develop a toolset that abstracts you from the underlying protocols. You might have to spend a fair amount of time getting up to speed on the Web service&#8217;s interface instead of solving the business problem at hand.<\/p>\n<p>What was needed was a standard way of formatting a remote procedure call (RPC) message and encoding its list of parameters. This is exactly what Section 7 of the SOAP specification provides. It describes a standard naming convention and encoding style for procedure-oriented messages.<\/p>\n<p>Because SOAP provides a standard format for serializing data into an XML message, platforms such as ASP.NET and Remoting can abstract away the details for you.<\/p>\n<p><b>Choosing Description Mechanisms<\/b><\/p>\n<p>SOAP provides a standard way of formatting messages exchanged between the Web service and the client. However, the client needs additional information in order to properly serialize the request and interpret the response. XML Schema provides a means of creating schemas that can be used to describe the contents of a message.<\/p>\n<p>XML Schema provides a core set of built-in datatypes that can be used to describe the contents of a message. You can also create your own datatypes. For example, the merchant bank can create a complex datatype to describe the content and structure of the body of a message used to submit a credit card payment request.<\/p>\n<p>A schema contains a set of datatype and element definitions. A Web service uses the schema not only to communicate the type of data that is expected to be within a message but also to validate incoming and outgoing messages.<\/p>\n<p>A schema alone does not provide enough information to effectively describe a Web service, however. The schema does not describe the message patterns between the client and the server. For example, a client needs to know whether to expect a response when an order is posted to the ERP system. A client also needs to know over what transport protocol the Web service expects to receive requests. Finally, the client needs to know the address where the Web service can be reached.<\/p>\n<p>This information is provided by a Web Services Description Language (WSDL) document. WSDL is an XML document that fully describes a particular Web service. Tools such as ASP.NET WSDL.exe and Remoting SOAPSUDS.exe can consume WSDL and automatically build proxies for the developer.<\/p>\n<p>As with any component used to build software, a Web service should also be accompanied by written documentation for developers who program against the Web service. The documentation should describe what the Web service does, the interfaces it exposes, and some examples of how to use it. Good documentation is especially important if the Web service is exposed to clients over the Internet.<\/p>\n<p><b>Choosing Discovery Mechanisms<\/b><\/p>\n<p>Once you&#8217;ve developed and documented a Web service, how can potential clients locate it? If the Web service is designed to be consumed by a member of your development team, your approach can be pretty informal, such as sharing the URL of the WSDL document with your peer a couple of cubicles down. But when potential clients are on the Internet, advertising your Web service effectively is an entirely different story.<\/p>\n<p>What&#8217;s needed is a common way to advertise Web services. Universal Description, Discovery, and Integration (UDDI) provides just such a mechanism. UDDI is an industry-standard centralized directory service that can be used to advertise and locate Web services. UDDI allows users to search for Web services using a host of search criteria, including company name, category, and type of Web service.<\/p>\n<p>Web services can also be advertised via DISCO, a proprietary XML document format defined by Microsoft that allows Web sites to advertise the services they expose. DISCO defines a simple protocol for facilitating a hyperlink style for locating resources. The primary consumer of DISCO is Microsoft Visual Studio.NET. A developer can target a particular Web server and navigate through the various Web services exposed by the server.<\/p>\n<p><b>What&#8217;s Missing from Web Services?<\/b><\/p>\n<p>You might have noticed that some key items found within a distributed component infrastructure are not defined by Web services. Two of the more noticeable omissions are a well-defined API for creating and consuming Web services and a set of component services, such as support for distributed transactions. Let&#8217;s discuss each of these missing pieces.<\/p>\n<ul>\n<li><b>Web service -specific API<\/b> Most distributed component infrastructures define an API to perform such tasks as initializing the runtime, creating an instance of a component, and reflecting the metadata used to describe the component. Because most high-level programming languages provide some degree of interoperability with C, the API is usually exposed as a flat set of C method signatures. RMI goes so far as to tightly couple its API with a single high-level language, Java.<\/li>\n<\/ul>\n<p>In an effort to ensure that Web services are programming language-agnostic, Microsoft has left it up to individual software vendors to bind support for Web services to a particular platform. I will discuss two Web service implementations for the.NET platform, ASP.NET and Remoting, later in the book.<\/p>\n<ul>\n<li><b>Component services<\/b> The Web services platform does not provide many of the services commonly found in distributed component infrastructures, such as remote object lifetime management, object pooling, and support for distributed transactions. These services are left up to the distributed component infrastructure to implement.<\/li>\n<\/ul>\n<p>Some services, such as support for distributed transactions, can be introduced later as the technology matures. Others, such as object pooling and possibly object lifetime management, can be considered an implementation detail of the platform. For example, Remoting defines extensions to provide support for object lifetime management, and Microsoft Component Services provides support for object pooling.<\/p>\n<p><b>Summary<\/b><\/p>\n<p>Component-based programming has proven to be a boon to developer productivity, but some services cannot be encapsulated by a component that resides within the client&#8217;s datacenter. Legacy technologies such as DCOM, CORBA, and Java RMI are ill-suited to allowing clients to access services over the Internet, so Microsoft found it necessary to start from the bottom and build an industry-standard way of accessing remote services.<\/p>\n<p><i>Webtjenester<\/i> is an umbrella term that describes a collection of industry- standard protocols and services used to facilitate a base-line level of interoperability between applications. The industry support that Web services has received is unprecedented. Never before have so many leading technology companies stepped up to support a standard that facilitates interoperability between applications, regardless of the platform on which they are run.<\/p>\n<p>One of the contributing factors to the success of Web services is that they&#8217;re built on existing Internet standards such as XML and HTTP. As a result, any system capable of parsing text and communicating via a standard Internet transport protocol can communicate with a Web service. Companies can also leverage the investment they have already made in these technologies.<\/p>","protected":false},"excerpt":{"rendered":"<p>Overview Component-based programming has become more popular than ever. Hardly an application is built today that does not involve leveraging components in some form, usually from different vendors. As applications have grown more sophisticated, the need to leverage components distributed on remote machines has also grown.<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-smtp-servers"],"_links":{"self":[{"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/comments?post=231"}],"version-history":[{"count":1,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":232,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/posts\/231\/revisions\/232"}],"wp:attachment":[{"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/media?parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/categories?post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.smtp-server.net\/da\/wp-json\/wp\/v2\/tags?post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}