Esempi delle migliori API Web SOAP / REST / RPC? E perché ti piacciono? E cosa c'è che non va in loro? [chiuso]

StackOverflow https://stackoverflow.com/questions/409338

  •  03-07-2019
  •  | 
  •  

Domanda

Nella mia azienda stiamo iniziando a diramare in API Web per accedere e aggiornare i nostri dati; inizialmente per i partner, ma probabilmente per il pubblico in futuro. Al momento l'aspetto dell'API (ad esempio SOAP, REST, RPC) è completamente aperto e non abbiamo ancora preso alcuna decisione, quindi sono interessato ad entrambi gli esempi di API Web che le persone pensano siano buone e perché pensi che.

Quello che mi interessa sono le opinioni di persone che usano lingue diverse (probabilmente offriremo l'API a persone che usano un numero di piattaforme, in particolare .NET, Java, ActionScript e JavaScript) sulle API Web che tu pensa che siano dei buoni esempi e con cui hai avuto buone esperienze.

Alcuni punti che vorrei trattare:

  1. Preferisci servizi di tipo SOAP o REST / RPC? Sospetto che le persone con supporto della piattaforma (ad esempio .NET, Java) preferiranno quelle SOAP e le persone che usano le lingue senza il supporto della piattaforma preferiranno le altre, ma mi piacerebbe convalidare tale presupposto.

  2. Ti interessa se un'API è effettivamente RESTful o se è un GET / POST HTTP vecchio stile RPC? Se è così, perché te ne importa? È più importante che un'API si descriva correttamente (ovvero non pretenda di essere RESTful se è in stile RPC) rispetto al fatto che sia effettivamente una delle due?

  3. Dobbiamo verificare chi sta utilizzando il servizio. Ho esaminato l'autenticazione Amazon S3 che utilizza un identificatore pubblico e un token privato utilizzato per eseguire l'hashing dei parametri della richiesta in un token di verifica (anche questo è simile a Flickr). Hai già usato questo tipo di autenticazione e come ci sei riuscito? Esistono algoritmi hash che ritieni problematici (ovvero non supportati dalla tua piattaforma)? Preferiresti inviare l'hash in un'intestazione HTTP o nell'URI?

  4. Come deve essere gestita la versione? È una buona idea avere una sottodirectory di tipo / v1 / in modo da poter affiancare versioni future o faresti qualcosa di diverso come avere la versione nel payload o nella query della richiesta? Per quanto tempo ti aspetteresti di supportare una versione di un'API per cui avresti costruito (ad esempio, se fosse stata introdotta la v2, quale sarebbe stata la tua aspettativa per la durata della v1).

Inoltre, qualsiasi altra opinione e punto da trattare sarebbe utile.

Sto deliberatamente rimanendo vago sul tipo effettivo di API che stiamo implementando, poiché sto cercando una guida generale in termini di ciò che le persone pensano siano buone API e meccanismi di implementazione, quindi questo post e le sue risposte saranno utili a più persone in futuro.


Nota: ho cercato e non riesco a trovare una domanda generica a riguardo - sembrano tutti specifici per un certo tipo di API - ma se è un duplicato, per favore fatemelo sapere. Inoltre, se dovrebbe essere wiki della comunità (penso che la gente dovrebbe ottenere credito per le risposte, quindi non ce l'ho fatta) quindi per favore fatemi sapere e lo cambierò per essere.

È stato utile?

Soluzione

Ecco la mia opinione.

  1. Sebbene provenga da un punto di vista Java, in realtà preferisco REST. La busta SOAP con più spazi dei nomi e la sua struttura complessa è un abominio. Cerca di risolvere principalmente problemi immaginari e non risolve nulla in modo efficiente. L'unica cosa su SOAP che ho trovato utile è che ha standard per l'autorizzazione e gli errori. D'altra parte, entrambi potrebbero essere risolti molto più facilmente includendo quattro attributi standard nell'elemento XML radice: nome utente, password, codice errore, descrizione errore.

  2. Una buona descrizione e documentazione dell'API è davvero tutto ciò che conta. La differenza tra REST e SOAP nel framework maturo si trova principalmente in alcune linee di configurazione.

  3. Per SOAP, inviare l'hash come parte della sicurezza SOAP; per REST, mi piace impacchettare tutto nel payload ed evitare le intestazioni HTTP per l'autenticazione. Ho solo ragioni soggettive, dal momento che ho dovuto combattere con framework che non espongono facilmente le intestazioni HTTP.

  4. La mia preferenza personale è avere URI diversi per versioni di protocollo diverse. Nella mia esperienza, questo ti dà maggiore flessibilità nelle versioni più recenti e i vecchi client che si connettono a versioni non supportate di un protocollo smettono di funzionare immediatamente e per ovvi motivi. Inoltre, a volte puoi associare la vecchia versione dell'applicazione al vecchio URI, per evitare di avere il codice di supporto legacy nella nuova versione del server.

    Per quanto tempo supporti la vecchia versione del protocollo ... idealmente, purché tu avere clienti che lo usano. Questo è più un business che una decisione tecnica. È necessario supportare almeno una versione del protocollo precedente. Di solito è nel tuo interesse spingere i clienti verso una nuova versione per ridurre i costi di supporto legacy; dal lato dei clienti, la nuova versione dovrebbe significare nuove funzionalità, un protocollo migliore e una sorta di incentivo aziendale aggiuntivo (se le nuove funzionalità da sole non bastano).

Altri suggerimenti

Potresti essere interessato alla presentazione di Joshua Bloch " Come progettare una buona API e Perché è importante " ;. Joshua Bloch è l'autore di " Effective Java " e un ingegnere software principale e capo architetto Java presso Google.

Riassunto: http://portal.acm.org/citation.cfm?id= 1176622

Diapositive: http://lcsd05.cs.tamu.edu/slides/keynote. pdf

Video: http://www.youtube.com/watch?v=aAb7hSCtvGw

Il versioning per REST utilizzando le intestazioni Content-Type è trattato bene qui:    http://barelyenough.org/blog/2008/05/versioning- Rest-web-services /

Anche l'approccio RPC è una buona opzione. Riduce il sovraccarico e progetti come Ice, Buffer di protocollo di Google e Apache Thrift stanno semplificando lo sviluppo di servizi basati su RPC.

Se non è necessario fornire un'API basata sul Web, RPC può anche essere una scelta che si desidera esplorare.

Vedrei cosa sta facendo Amazon - http://aws.amazon.com/ - i ragazzi che fanno soldi con questa roba evidentemente avranno imparato più lezioni di chiunque altro.

Altre API che guarderei: salesforce.com e Microsofts CRM api erano piuttosto interessanti. Twitter ha anche una API REST rafforzata dalla battaglia.

IMHO, tutto dipende dal tipo di app che stai offrendo. Se stai effettuando transazioni importanti, alla grande, allora sicuramente vai con SOAP (WS "stella della morte" come la chiamano). Ma se offri app social, scegli REST, poiché è più semplice e adatto agli hacker pubblici.

REST, se eseguito correttamente, è facile da capire (modelli HTTP), semplice (orientato alle risorse) e può essere analizzato praticamente da ogni linguaggio di programmazione (XML).

Se alla fine non riesci a prendere una decisione, potresti implementarli tutti. In questi casi è utile guardare come gli altri lo hanno fatto. Ti consiglio Open Source XML Native Database eXist che offre i tre tipi di interfacce stai intimidendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top