{"id":8643,"date":"2023-10-03T18:47:43","date_gmt":"2023-10-03T17:47:43","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=166456"},"modified":"2023-10-03T18:47:43","modified_gmt":"2023-10-03T17:47:43","slug":"rsocket-interface-in-spring-6","status":"publish","type":"post","link":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/2023\/10\/03\/rsocket-interface-in-spring-6\/","title":{"rendered":"RSocket Interface in Spring 6"},"content":{"rendered":"<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" decoding=\"async\" style=\"float: left; margin-right: 5px;\" loading=\"lazy\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-300x157.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-768x402.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-100x52.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08.png 1200w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-overview\" data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>In this tutorial, we&#8217;ll explore how to utilize <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/spring-boot-rsocket\">RSocket<\/a> in the Spring Framework 6<em>.<\/em><\/p>\n<p><strong>Working with <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/rsocket\">RSocket<\/a> has become simpler with the introduction of declarative RSocket clients in version 6 of the Spring Framework<em>.<\/em> This feature eliminates the need for repetitive boilerplate code, allowing developers to use RSocket more efficiently and effectively.<\/strong><\/p>\n<h2 id=\"bd-maven-dependency\" data-id=\"maven-dependency\">2. Maven Dependency<\/h2>\n<div class=\"bd-anchor\" id=\"maven-dependency\"><\/div>\n<p>We start by creating a Spring Boot project in our preferred IDE and add the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/mvnrepository.com\/artifact\/org.springframework.boot\/spring-boot-starter-rsocket\"><em>spring-boot-starter-rsocket<\/em><\/a> dependency to the <em>pom.xml<\/em> file:<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt; \r\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt; \r\n    &lt;artifactId&gt;spring-boot-starter-rsocket&lt;\/artifactId&gt;\r\n    &lt;version&gt;3.1.4&lt;\/version&gt;\r\n&lt;\/dependency&gt; \r\n<\/code><\/pre>\n<h2 id=\"bd-creating-rsocket-server\" data-id=\"creating-rsocket-server\">3. Creating RSocket Server<\/h2>\n<div class=\"bd-anchor\" id=\"creating-rsocket-server\"><\/div>\n<p>First, we&#8217;ll create a responder that uses a controller to manage incoming requests:<\/p>\n<pre><code class=\"language-java\">@MessageMapping(&quot;MyDestination&quot;)\r\npublic Mono&lt;String&gt; message(Mono&lt;String&gt; input) {\r\n    return input.doOnNext(msg -&gt; System.out.println(&quot;Request is:&quot; + msg + &quot;,Request!&quot;))\r\n      .map(msg -&gt; msg + &quot;,Response!&quot;);\r\n}<\/code><\/pre>\n<p>Besides, we&#8217;ll add the following property to the <em>application.properties<\/em> file to enable the server to listen on port <em>7000<\/em> via <em>MyDestination:<\/em><\/p>\n<pre><code class=\"language-yaml\">spring.rsocket.server.port=7000<\/code><\/pre>\n<h2 id=\"bd-client-code\" data-id=\"client-code\">4. Client Code<\/h2>\n<div class=\"bd-anchor\" id=\"client-code\"><\/div>\n<p>Now, we need to develop the client code. To keep things simple, we&#8217;ll create the client code in the same project but in a separate package. In reality, they must be in a unique project.<\/p>\n<p>To proceed, let us create the client interface:<\/p>\n<pre><code class=\"language-java\">public interface MessageClient {\r\n    @RSocketExchange(&quot;MyDestination&quot;)\r\n    Mono&lt;String&gt; sendMessage(Mono&lt;String&gt; input);\r\n}\r\n<\/code><\/pre>\n<p>When using our client interface, <strong>we use <em>@RSocketExchange<\/em> to show the RSocket endpoint. Basically, this just means we need some info to establish the endpoint path. We can do that at the interface level by assigning a shared path<\/strong>. It&#8217;s super easy and helps us to know which endpoint we want to use.<\/p>\n<h2 id=\"bd-testing\" data-id=\"testing\">5. Testing<\/h2>\n<div class=\"bd-anchor\" id=\"testing\"><\/div>\n<p>Every Spring Boot project includes a class annotated with <em>@SpringBootApplication<\/em>. This class runs when the project is loaded. Therefore, we can use this class and add some beans to test a scenario.<\/p>\n<h3 id=\"bd-1-create-rsocketserviceproxyfactory-bean\" data-id=\"1-create-rsocketserviceproxyfactory-bean\">5.1. Create <em>RSocketServiceProxyFactory<\/em> Bean<\/h3>\n<div class=\"bd-anchor\" id=\"1-create-rsocketserviceproxyfactory-bean\"><\/div>\n<p>First, we need to create a bean to generate an <em>RSocketServiceProxyFactory<\/em>.<\/p>\n<p>This factory is responsible for creating proxy instances of the RSocket service interface. It handles the creation of these proxies and establishes the necessary connection to the RSocket server by specifying the host and port where the server will receive incoming connections:<\/p>\n<pre><code class=\"language-java\">@Bean\r\npublic RSocketServiceProxyFactory getRSocketServiceProxyFactory(RSocketRequester.Builder requestBuilder) {\r\n    RSocketRequester requester = requestBuilder.tcp(&quot;localhost&quot;, 7000);\r\n    return RSocketServiceProxyFactory.builder(requester).build();\r\n}<\/code><\/pre>\n<h3 id=\"bd-2-create-message-client\" data-id=\"2-create-message-client\">5.2. Create Message Client<\/h3>\n<div class=\"bd-anchor\" id=\"2-create-message-client\"><\/div>\n<p>Then, we&#8217;ll create a <em>Bean<\/em> responsible for generating a client interface<strong>:<\/strong><\/p>\n<pre><code class=\"language-java\">@Bean\r\npublic MessageClient getClient(RSocketServiceProxyFactory factory) {\r\n    return factory.createClient(MessageClient.class);\r\n}<\/code><\/pre>\n<h3 id=\"bd-3-create-runner-bean\" data-id=\"3-create-runner-bean\">5.3. Create Runner <em>Bean<\/em><\/h3>\n<div class=\"bd-anchor\" id=\"3-create-runner-bean\"><\/div>\n<p>Finally, let&#8217;s create a runner bean that uses the <em>MessageClient<\/em> instance to send and receive messages from the server:<\/p>\n<pre><code class=\"language-\">@Bean\r\npublic ApplicationRunner runRequestResponseModel(MessageClient client) {\r\n    return args -&gt; {\r\n        client.sendMessage(Mono.just(&quot;Request-Response test &quot;))\r\n          .doOnNext(message -&gt; {\r\n              System.out.println(&quot;Response is :&quot; + message);\r\n          })\r\n          .subscribe();\r\n    };\r\n}<\/code><\/pre>\n<h3 id=\"bd-4-test-results\" data-id=\"4-test-results\">5.4. Test Results<\/h3>\n<div class=\"bd-anchor\" id=\"4-test-results\"><\/div>\n<p>When we run our Spring Boot project through the command line, the following results are displayed:<\/p>\n<pre><code class=\"language-powershell\">&gt;&gt;c.b.r.responder.RSocketApplication : Started \r\n&gt;&gt;RSocketApplication in 1.127 seconds (process running for 1.398)\r\n&gt;&gt;Request is:Request-Response test ,Request!\r\n&gt;&gt;Response is :Request-Response test ,Response!<\/code><\/pre>\n<h2 id=\"bd-rsocket-interaction-models\" data-id=\"rsocket-interaction-models\">6. RSocket Interaction Models<\/h2>\n<div class=\"bd-anchor\" id=\"rsocket-interaction-models\"><\/div>\n<p>RSocket is a binary protocol used to create fast and responsive distributed applications. It offers different communication patterns for exchanging data between servers and clients.<\/p>\n<p>With these interaction models, developers can design systems that meet specific requirements for data flow, backlog, and application behavior.<\/p>\n<p>RSocket has four main interaction models available. <strong>The main difference between these approaches is based on the cardinality of input and output.<\/strong><\/p>\n<h3 id=\"bd-1-request-response\" data-id=\"1-request-response\">6.1. Request-Response<\/h3>\n<div class=\"bd-anchor\" id=\"1-request-response\"><\/div>\n<p>In this approach, every request receives a single response. Therefore, we used a <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/reactor-core\"><em>Mono<\/em><\/a> request with a cardinality of one and received a <em>Mono<\/em> response with the same cardinality.<\/p>\n<p>Until now, all our code in this article were based on a request-response model.<\/p>\n<h3 id=\"bd-2-request-stream\" data-id=\"2-request-stream\">6.2. Request-Stream<\/h3>\n<div class=\"bd-anchor\" id=\"2-request-stream\"><\/div>\n<p>When we subscribe to a newsletter, we receive a regular flow of updates from the server. When the client makes the initial request, the server sends a data stream in response.<\/p>\n<p>The request can be either a <em>Mono<\/em> or a <em>Void<\/em>, but the response will always be a <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-reactor-flux-vs-mono\"><em>Flux<\/em><\/a>:<\/p>\n<pre><code class=\"language-java\">@MessageMapping(&quot;Counter&quot;)\r\npublic Flux&lt;String&gt; Counter() {\r\n    return Flux.range(1, 10)\r\n      .map(i -&gt; &quot;Count is: &quot; + i);\r\n}<\/code><\/pre>\n<h3 id=\"bd-3-fire-and-forget\" data-id=\"3-fire-and-forget\">6.3. Fire-and-Forget<\/h3>\n<div class=\"bd-anchor\" id=\"3-fire-and-forget\"><\/div>\n<p>When we send a letter through the mail, we usually just drop it in the mailbox and don&#8217;t expect to receive a reply. Similarly, in the fire-and-forget context, the response can be either <em>null<\/em> or a single <em>Mono<\/em>:<\/p>\n<pre><code class=\"language-java\">@MessageMapping(&quot;Warning&quot;)\r\npublic Mono&lt;Void&gt; Warning(Mono&lt;String&gt; error) {\r\n    error.doOnNext(e -&gt; System.out.println(&quot;warning is :&quot; + e))\r\n      .subscribe();\r\n    return Mono.empty();\r\n}<\/code><\/pre>\n<h3 id=\"bd-4-channel\" data-id=\"4-channel\">6.4. Channel<\/h3>\n<div class=\"bd-anchor\" id=\"4-channel\"><\/div>\n<p>Imagine a walkie-talkie that allows two-way communication where both parties can talk and listen simultaneously, just like having a conversation. This type of communication relies on sending and receiving data <em>Flux<\/em>:<\/p>\n<pre><code class=\"language-java\">@MessageMapping(&quot;channel&quot;)\r\npublic Flux&lt;String&gt; channel(Flux&lt;String&gt; input) {\r\n    return input.doOnNext(i -&gt; {\r\n          System.out.println(&quot;Received message is : &quot; + i);\r\n      })\r\n      .map(m -&gt; m.toUpperCase())\r\n      .doOnNext(r -&gt; {\r\n          System.out.println(&quot;RESPONSE IS :&quot; + r);\r\n      });\r\n}<\/code><\/pre>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">7. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this article, we explored the new declarative RSocket client feature in Spring 6. We also learned how to use it with the @<em>RSocketExchange<\/em> annotation.<\/p>\n<p>Additionally, we saw in detail how to create and set up the service proxy so that we can easily and safely connect to a remote endpoint using the TCP protocol.<\/p>\n<p>Furthermore, the source code for this tutorial is available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/spring-6-rsocket\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/797352701\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/797352701\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F10%2FSpring-Featured-Image-08-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-rsocket#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-rsocket\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<h2><b>Commercials Cooperation Advertisements:<\/b><\/h2>\r\n<p><br>(1) IT Teacher IT Freelance<br> <\/p>\r\n<a href=https:\/\/itteacheritfreelance.hk\/wordpress><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITTeacherITFreelance-Website.png alt=IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\/><\/a><p><a href=https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/findteacher>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427! <\/a><br>\r\n\r\n\u7535\u5b50\u8ba1\u7b97\u673a -\u6559\u80b2 -IT \u96fb\u8166\u73ed\u201d ( IT\u96fb\u8166\u88dc\u7fd2 ) \u63d0\u4f9b\u4e00\u500b\u65b9\u4fbf\u7684\u7535\u5b50\u8ba1\u7b97\u673a \u6559\u80b2\u5e73\u53f0, \u70ba\u5927\u5bb6\u914d\u5c0d\u4fe1\u606f\u6280\u672f, \u96fb\u8166 \u8001\u5e2b, IT freelance \u548c programming expert. \u8b93\u5927\u5bb6\u65b9\u4fbf\u5730\u5c31\u80fd\u627e\u5230\u5408\u9069\u7684\u96fb\u8166\u88dc\u7fd2, \u96fb\u8166\u73ed, \u5bb6\u6559, \u79c1\u4eba\u8001\u5e2b.  <br>\r\n\r\nWe are a education and information platform which you can find a IT private tutorial teacher or freelance. <br>\r\n\r\nAlso we provide different information about information technology, Computer, programming, mobile, Android, apple, game, movie, anime, animation\u2026 \r\n<\/p>\n<p><br>(2) ITSec<br> <\/p><a href=https:\/\/itsec.vip><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITSec-Main-Promotion-Image.png alt= https:\/\/itsec.vip\/\r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers.  \r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training.\/><\/a> \r\n<br><br> \r\n<p><a href=https:\/\/itsec.vip>www.ITSec.vip<\/a> <br> <br> \r\n<p><a href=https:\/\/sraa.com.hk>www.Sraa.com.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itsec.hk>www.ITSec.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/penetrationtest.hk>www.Penetrationtest.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itseceu.uk>www.ITSeceu.uk<\/a> <br> <br> \r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers. <br><br>\r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training. \r\n<br><br>Contact us right away. <br><br>Email (Prefer using email to contact us): <br>SalesExecutive@ITSec.vip<\/p>","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Explore the new declarative RSocket client feature in Spring 6.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/797352701\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F10%2FSpring-Featured-Image-08-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/797352701\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-rsocket#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-rsocket\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/div>\n","protected":false},"author":411,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[22],"tags":[61,122,127,129,124,128,125,132,131,133,126,130,123,66,94,88,97,56,64,65,60,112,40,75,95,104,33,120,105,101,98,115,30,29,41,86,70,69,68,72,71,26,118,108,87,46,55,48,52,54,51,50,83,62,58,57,109,35,59,63,85,79,82,96,80,27,81,114,44,42,43,45,38,39,110,117,100,111,116,73,89,90,92,91,93,84,78,37,102,34,36,77,67,74,99,113,4090,119,28,121,32,47,49,53,103,31,76],"class_list":["post-8643","post","type-post","status-publish","format-standard","hentry","category-mobile","tag-airpods","tag-anime","tag-anime-characters","tag-anime-cosplay","tag-anime-edits","tag-anime-merchandise","tag-anime-movies","tag-anime-news","tag-anime-recommendations","tag-anime-reviews","tag-anime-series","tag-anime-streaming","tag-animes","tag-app-store","tag-app-store-samsung","tag-appgallery","tag-appgallery-oneplus","tag-apple","tag-apple-music","tag-apple-tv","tag-apple-watch","tag-bbc-sport","tag-best-mobile-games","tag-bixby","tag-bixby-xiaomi","tag-champions-league","tag-cyberpunk","tag-cyberpunk-2077","tag-fantasy-football","tag-fifa","tag-football","tag-formula-1","tag-fortnite","tag-free-fire","tag-free-mobile-games","tag-freebuds-pro","tag-galaxy-a52","tag-galaxy-note-20","tag-galaxy-s21","tag-galaxy-watch-4","tag-galaxy-z-fold-3","tag-game","tag-games","tag-golf","tag-harmonyos","tag-how-to-backup-iphone","tag-how-to-factory-reset-iphone","tag-how-to-reset-iphone","tag-how-to-restore-iphone","tag-how-to-unlock-iphone","tag-how-to-unlock-iphone-5","tag-how-to-unlock-iphone-6","tag-huawei","tag-ios","tag-ipad","tag-iphone","tag-live-soccer","tag-lol","tag-macbook","tag-macos","tag-mate-40-pro","tag-mi-11-lite","tag-mi-home-security-camera-basic-1080p","tag-mi-home-security-camera-basic-1080p-huawei","tag-mi-smart-band-6","tag-minecraft","tag-miui","tag-mlb-scores","tag-mobile-game-design","tag-mobile-game-development","tag-mobile-game-marketing","tag-mobile-game-monetization","tag-mobile-games","tag-mobile-gaming","tag-nba-scores","tag-nba-standings","tag-nfl","tag-nfl-scores","tag-nhl-scores","tag-one-ui","tag-oneplus","tag-oneplus-9-pro","tag-oneplus-buds-pro","tag-oneplus-nord-ce-5g","tag-oxygenos","tag-p40-pro-plus","tag-poco-x3-pro","tag-pokemon","tag-premier-league","tag-pubg","tag-pubg-mobile","tag-redmi-note-10-pro","tag-samsung","tag-samsung-pay","tag-soccer","tag-sports","tag-spring","tag-steam","tag-steeam","tag-top-10-anime","tag-valorant","tag-when-do-the-iphone-7-come-out","tag-when-does-the-iphone-7-come-out","tag-when-is-the-iphone-7-coming-out","tag-world-cup","tag-xbox-series-x","tag-xiaomi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/8643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/comments?post=8643"}],"version-history":[{"count":1,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/8643\/revisions"}],"predecessor-version":[{"id":8644,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/8643\/revisions\/8644"}],"wp:attachment":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/media?parent=8643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/categories?post=8643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/tags?post=8643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}