RESTful Api doit être apatrides, mais qu'en simultanéité?
Je suis curieux de savoir comment je résoudre le problème de concurrence pour une API RESTful. Plus précisément, j'ai une collection d'objets qui ont besoin de manuel d'examen et de mise à jour, par exemple, un certain nombre de lignes qui ont besoin d'une colonne de mise à jour à la main; cependant, si j'ouvre l'API pour un certain nombre de clients, ils seront tous accaparement de ces éléments à partir du haut vers le bas, de sorte que de nombreux utilisateurs seront remplissage de la colonne de la même ligne en même temps. Je préfère ne pas avoir de collisions, et le simple, stateful façon est de simplement le jeter d'éléments dans une file d'attente sur le service et les pop off que les gens en font la demande.
Qu'est-ce que les apatrides version de cette? Les Hash de l'adresse IP, ou de manière aléatoire saisir des lignes en fonction de l'id?
:: mise jour ::
"Gestion des ressources humaines, de sorte qu'il doit tout simplement être apatrides du point de vue du client?
Qui a certainement fait beaucoup de sens. Je viens de lire un article (ibm.com/developerworks/webservices/library/ws-restful) sur RESTful Api, et après avoir rencontré le bit sur la pagination, je craignais que mon très dynamique de la file d'attente était semblable à l'incrémentation d'une page, mais ils sont en fait assez différents comme "page suivante" est relatif sur le côté client, alors que le "pop" est toujours apatrides pour le client: Il n'a pas d'importance ce qui a été sauté avant.
Merci d'éclaircir ma tête!" -Moi
- Je ne vois vraiment pas le problème/question ici. RESTful Api peuvent être - et de l'IME sont presque toujours soutenu par la dynamique des serveurs. Pourriez-vous préciser le problème que vous essayez de résoudre?
- e-étiquettes peuvent être utilisées fournir la simultanéité
- Gestion des ressources humaines, de sorte qu'il doit tout simplement être apatrides du point de vue du client? Qui a certainement fait beaucoup de sens. Je viens de lire un article (ibm.com/developerworks/webservices/library/ws-restful) sur RESTful Api, et après avoir rencontré le bit sur la pagination, je craignais que mon très dynamique de la file d'attente était semblable à l'incrémentation d'une page, mais ils sont en fait assez différents comme "page suivante" est relatif sur le côté client, alors que le "pop" est toujours apatrides pour le client. Il n'a pas d'importance ce qui a été sauté avant. Merci d'éclaircir ma tête!
Vous devez vous connecter pour publier un commentaire.
Il existe deux approches que vous pouvez prendre:
Vont complètement à l'apatride, et d'adopter une "dernière demande victoires" de la stratégie. Aussi étrange que cela puisse paraître, il est probable que le solution la plus propre en termes de prévisibilité, de l'évolutivité, la complexité du code et la mise en œuvre sur les deux côtés client et serveur. Il y a aussi beaucoup de priorité pour elle: regardez comment des sites comme Google paginer par le biais de requêtes à l'aide d'un
start=10
pour la page 2,start=20
pour la page 3, etc.Vous trouverez peut-être que les changements de contenu dans les pages que vous revenez en arrière et en avant entre eux, mais alors quoi? Vous êtes toujours obtenir les informations les plus récentes, et Google permet de gérer vos demandes sur l'un de leurs nombreux serveurs sans avoir à trouver vos informations de session, afin de déterminer ce que votre dernière requête contexte.
Le plus grand avantage de cette approche est la simplicité de votre serveur de mise en œuvre. Chaque demande peut juste passer au travers de la couche de données, à la fin, et il est tout à fait mûrs pour la mise en cache à la fois le niveau HTTP (via E-Étiquettes ou de Dernière modification des en-têtes) et côté serveur (en utilisant quelque chose comme memcache, par exemple).
Aller stateful, et de trouver une façon d'avoir de vos serveurs de dole, une sorte de client par client de verrouillage ou un jeton pour chaque API "session". Ce sera comme essayer de lutter contre l'océan, la marée avec un bâton, parce que vous finirez par défaut et frustré.
Comment allez-vous identifier les clients? Les clés de Session? Adresse IP? Descripteur de fichier pour le support qu'ils montaient sur (bonne chance si vous utilisez un transport comme HTTP, où la connexion peut être fermé entre les demandes...)? Les détails que vous choisissez pour cela devra être conservé sur le côté serveur, ou vous devrez utiliser un peu méchant vieux collant session sur votre serveur d'application (et si oui, ciel, à l'aide de votre client si le serveur à l'aide descend au milieu de la session).
Comment allez-vous gérer les clients API qui disparaissent ungracefully? Vous timeout de la session verrouille automatiquement par un moissonneur fil nettoyer ceux qui sont inactifs? C'est plus de code, plus de complexité et plus de places pour les bugs à cacher. Quid de l'API de clients qui viennent de rentrer d'un long temps d'inactivité et d'essayer de le ré-utiliser l'expiration d'un verrou, comment doit-applications clientes être construit pour gérer cette situation?
Je pourrais continuer, mais j'espère que vous pouvez voir mon point de vue. Allez à l'option 1, et aller de l'apatride. Sinon vous vous retrouverez en train de suivre le client de l'état sur le côté serveur. Et la seule chose qui devrait suivre un client de l'état, c'est le client lui-même.
Il est d'accord pour maintenir les ressources de l'état. Les "apatrides interdiction", renvoie à l'état de session.
Voici un extrait de Roy Fielding majeur du RESTE de dérivation: