{"id":50179,"date":"2023-02-04T06:08:53","date_gmt":"2023-10-07T07:48:28","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/"},"modified":"2024-04-29T13:03:36","modified_gmt":"2024-04-29T05:03:36","slug":"%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/","title":{"rendered":"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo"},"content":{"rendered":"<h1>\u81ea\u7136\u9065\u63a7<\/h1>\n<p>\u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u667a\u80fd\u624b\u673a\u3001\u667a\u80fd\u97f3\u7bb1\u7b49\u8bbe\u5907\u63a7\u5236\u7535\u89c6\u3001\u7a7a\u8c03\u7b49\u7ea2\u5916\u7ebf\u64cd\u4f5c\u7684\u5bb6\u7535\u8bbe\u5907\uff0c\u540d\u4e3aNature Remo\uff08\u81ea\u7136\u9065\u63a7\uff09\u3002<\/p>\n<h1>\u603b\u7ed3<\/h1>\n<p>\u5076\u5c14AWS\u6545\u969c\u4f1a\u6ce2\u53ca\u5230NatureRemo\u5bfc\u81f4\u65e0\u6cd5\u4f7f\u7528\u3002<br \/>\n\u4e00\u65e6\u8fd9\u79cd\u60c5\u51b5\u53d1\u751f\uff0c\u5e73\u65f6\u901a\u8fc7Alexa\u6765\u64cd\u4f5c\u5bb6\u7535\u7684\u5207\u6362\u5c31\u65e0\u6cd5\u4f7f\u7528\u9065\u63a7\u5668\u4e86\u3002<\/p>\n<blockquote><p>\u6628\u665a\u6df1\u591c\u5f00\u59cb\u7684Nature Remo\u7cfb\u7edf\u6545\u969c\u662f\u7531\u4e8eAWS\uff08\u4e9a\u9a6c\u900a\u7f51\u7edc\u670d\u52a1\uff09\u7684\u6545\u969c\u5f15\u8d77\u7684\u3002\u76ee\u524d\u5df2\u7ecf\u90e8\u5206\u6539\u5584\uff0c\u4f46\u5b8c\u5168\u6062\u590d\u8fd8\u9700\u8981\u4e00\u4e9b\u65f6\u95f4\u3002\u975e\u5e38\u62b1\u6b49\u7ed9\u60a8\u5e26\u6765\u4e0d\u4fbf\u3002\u5e0c\u671b\u60a8\u80fd\u7a0d\u7b49\u6062\u590d\uff0c\u8c22\u8c22\u3002<\/p><\/blockquote>\n<p><script><\/script><\/p>\n<p>\u6b64\u5916\uff0cNatureRemo\u8fd8\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u4ee5\u4ece\u672c\u5730\u73af\u5883\u8bbf\u95ee\u7684API\uff0c\u8be5API\u53ea\u80fd\u83b7\u53d6\u548c\u6267\u884c\u7ea2\u5916\u4fe1\u53f7\u3002<br \/>\n\u5229\u7528\u8fd9\u4e2aAPI\uff0c\u6211\u4eec\u5c06\u5f00\u53d1\u4e00\u4e2a\u53ef\u4ee5\u5728\u672c\u5730\u73af\u5883\u4e2d\u64cd\u4f5cNatureRemo\u7684\u5e94\u7528\u7a0b\u5e8f\u3002<br \/>\n\u5c1a\u672a\u5b9e\u73b0\u4fdd\u5b58\u7ea2\u5916\u4fe1\u53f7\u7684\u673a\u5236\uff0c\u6211\u4eec\u4e5f\u5c06\u4e00\u5e76\u8fdb\u884c\u5b9e\u73b0\u3002<br \/>\nNature Inc.<\/p>\n<h1>\u73af\u5883\u6574\u7406 &#8211; \u6574\u7406\u73af\u5883<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b5\u30fc\u30d0: Spring-boot<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9: React.js<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">DB: Cassandra<\/ul>\n<h1>\u670d\u52a1\u5668\u7aef<\/h1>\n<p>akapo001\/local-remo \u5728\u670d\u52a1\u5668\u7aef\u4f7f\u7528SpringBoot\u5b9e\u73b0\u4e86REST API\u3002<br \/>\n\u867d\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528Firebase\u8fdb\u884c\u5b9e\u73b0\uff0c\u4f46\u662f\u4e0b\u4e00\u4e2a\u5206\u914d\u7684\u9879\u76ee\u8ba1\u5212\u4e2d\u4f1a\u4f7f\u7528Spring\uff0c\u4e3a\u4e86\u56de\u5fc6\u8d77\u6765\uff0c\u6211\u51b3\u5b9a\u81ea\u5df1\u5b9e\u73b0\u3002<br \/>\n\u7531\u4e8e\u4eceNatureRemo\u83b7\u53d6\u7684\u7ea2\u5916\u7ebf\u4fe1\u606f\u5728\u683c\u5f0f\u4e0a\u770b\u8d77\u6765\u5f88\u68d8\u624b\uff0c\u6211\u51b3\u5b9a\u4f7f\u7528NoSQL\u7684Cassandra\u8fdb\u884c\u6570\u636e\u5b58\u50a8\u3002<br \/>\nCassandra\u662f\u4f7f\u7528Docker\u955c\u50cf\u8fdb\u884c\u6784\u5efa\u7684\u3002<\/p>\n<h2>API\u6e05\u5355<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4fe1\u53f7\u53d6\u5f97<\/ul>\n<\/li>\n<\/ul>\n<p>NatureRemo\u304b\u3089\u8d64\u5916\u7dda\u4fe1\u53f7\u3092\u53d6\u5f97\u3059\u308b<br \/>\nNatureRemo\u306b\u8d64\u5916\u7dda\u4fe1\u53f7\u3092\u5f53\u3066\u305f\u3042\u3068\u3053\u306eAPI\u3092\u5b9f\u884c\u3059\u308b\u3068\u8d64\u5916\u7dda\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u308b<\/p>\n<p>\u4fe1\u53f7\u4fdd\u5b58<\/p>\n<p>\u4fe1\u53f7\u53d6\u5f97\u3067\u53d6\u5f97\u3057\u305f\u8d64\u5916\u7dda\u60c5\u5831\u3092\u305d\u306e\u307e\u307e\u3053\u306eAPI\u306eBody\u306b\u308f\u305f\u3059\u3068\u30b5\u30fc\u30d0\u5074\u306eCassandra\u306b\u4fdd\u5b58\u3059\u308bAPI<br \/>\n\u30d1\u30b9\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u4fe1\u53f7\u306b\u7d10\u4ed8\u3051\u308b\u540d\u524d\u3092\u6307\u5b9a\u3059\u308b\u3002<\/p>\n<p>\u4fe1\u53f7\u4e00\u89a7\u53d6\u5f97<\/p>\n<p>Cassandra\u306b\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u4fe1\u53f7\u306e\u4e00\u89a7\u3092\u53d6\u5f97\u3059\u308b\u3002<\/p>\n<p>\u4fe1\u53f7\u5b9f\u884c<\/p>\n<p>\u4fe1\u53f7\u4e00\u89a7\u3067\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u304b\u3089\u5b9f\u884c\u3057\u305f\u3044\u4fe1\u53f7\u306eID\u3092\u8a2d\u5b9a\u3057\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308b\u3068NatureRemo\u3092\u901a\u3057\u3066\u5bb6\u96fb\u306e\u64cd\u4f5c\u304c\u3067\u304d\u308b\u3002<\/p>\n<p>\u4fe1\u53f7\u524a\u9664<\/p>\n<p>\u4fe1\u53f7\u4e00\u89a7\u3067\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u304b\u3089\u524a\u9664\u3057\u305f\u3044\u4fe1\u53f7\u306eID\u3092\u8a2d\u5b9a\u3057\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308b\u3068Cassandra\u304b\u3089\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3059\u308b\u3002<\/p>\n<h2>\u5c06Spring\u914d\u7f6e\u8fde\u63a5\u5230Cassandra\u3002<\/h2>\n<p>\u7531\u4e8e\u7f3a\u4e4fSpring\u8c03\u7528Cassandra\u7684\u793a\u4f8b\uff0c\u6211\u9047\u5230\u4e86\u4e00\u4e9b\u56f0\u96be\uff0c\u4f46\u901a\u8fc7\u5b9a\u4e49\u4ee5\u4e0b\u7c7b\u4f5c\u4e3a\u914d\u7f6e\u7c7b\uff0c\u6211\u6210\u529f\u8fdb\u884c\u4e86\u8fde\u63a5\u3002<br \/>\n\u5c06Keyspace\u3001\u4e3b\u673a\u548c\u7aef\u53e3\u7b49\u4fe1\u606f\u4ece\u914d\u7f6e\u6587\u4ef6\u4e2d\u8bfb\u53d6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@Configuration<\/span>\r\n<span class=\"nd\">@EnableCassandraRepositories<\/span><span class=\"o\">(<\/span><span class=\"n\">cassandraTemplateRef<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"cassandraTemplate\"<\/span><span class=\"o\">)<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">CassandraConfig<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">AbstractCassandraConfiguration<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${spring.data.cassandra.username}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">username<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${spring.data.cassandra.password}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">password<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${spring.data.cassandra.keyspace-name}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">keyspaceName<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${spring.data.cassandra.contact-points}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">contactPoints<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${spring.data.cassandra.port}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">port<\/span><span class=\"o\">;<\/span>\r\n\r\n\r\n    <span class=\"nd\">@Override<\/span>\r\n    <span class=\"nd\">@Primary<\/span>\r\n    <span class=\"nd\">@Bean<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">CassandraAdminTemplate<\/span> <span class=\"nf\">cassandraTemplate<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">CqlSession<\/span> <span class=\"n\">session<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">CqlSession<\/span><span class=\"o\">.<\/span><span class=\"na\">builder<\/span><span class=\"o\">().<\/span><span class=\"na\">withKeyspace<\/span><span class=\"o\">(<\/span><span class=\"n\">keyspaceName<\/span><span class=\"o\">).<\/span><span class=\"na\">build<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">CassandraAdminTemplate<\/span><span class=\"o\">(<\/span><span class=\"n\">session<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"c1\">\/\/ \u30dd\u30fc\u30c8\u756a\u53f7\u306e\u8a2d\u5b9a<\/span>\r\n    <span class=\"nd\">@Override<\/span>\r\n    <span class=\"nd\">@Bean<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"Port\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"nf\">getPort<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">port<\/span><span class=\"o\">;<\/span>  <span class=\"c1\">\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306f9042<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"c1\">\/\/ \u30ad\u30fc\u30b9\u30da\u30fc\u30b9\u306e\u8a2d\u5b9a<\/span>\r\n    <span class=\"nd\">@Override<\/span>\r\n    <span class=\"nd\">@Bean<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"KeySpace\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">protected<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">getKeyspaceName<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">keyspaceName<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h2>Cassandra\u64cd\u4f5c<\/h2>\n<p>\u7531\u4e8e\u8fd9\u4e5f\u662f\u6700\u65b0\u7248\u672c\uff0cAPI\u7684\u63a5\u53e3\u4f3c\u4e4e\u4e0d\u540c\uff0c\u6240\u4ee5\u5f88\u96be\u8bbf\u95ee\u3002\u5728\u4e0b\u9762\u9644\u4e0a\u6837\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@Service<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">CassandraService<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@Autowired<\/span>\r\n    <span class=\"nc\">CassandraAdminTemplate<\/span> <span class=\"n\">cassandraTemplate<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">SignalTable<\/span> <span class=\"nf\">insert<\/span><span class=\"o\">(<\/span><span class=\"nc\">Signal<\/span> <span class=\"n\">signal<\/span><span class=\"o\">,<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">name<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">cassandraTemplate<\/span><span class=\"o\">.<\/span><span class=\"na\">insert<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">SignalTable<\/span><span class=\"o\">(<\/span><span class=\"nc\">Uuids<\/span><span class=\"o\">.<\/span><span class=\"na\">timeBased<\/span><span class=\"o\">(),<\/span> <span class=\"n\">name<\/span><span class=\"o\">,<\/span> <span class=\"n\">signal<\/span><span class=\"o\">));<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">SignalTable<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">selectAll<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">SimpleStatement<\/span> <span class=\"n\">select<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">QueryBuilder<\/span><span class=\"o\">.<\/span><span class=\"na\">selectFrom<\/span><span class=\"o\">(<\/span><span class=\"s\">\"signal\"<\/span><span class=\"o\">).<\/span><span class=\"na\">all<\/span><span class=\"o\">().<\/span><span class=\"na\">build<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">cassandraTemplate<\/span><span class=\"o\">.<\/span><span class=\"na\">select<\/span><span class=\"o\">(<\/span><span class=\"n\">select<\/span><span class=\"o\">,<\/span> <span class=\"nc\">SignalTable<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">SignalTable<\/span> <span class=\"nf\">select<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">id<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"no\">UUID<\/span> <span class=\"n\">uuid<\/span> <span class=\"o\">=<\/span> <span class=\"no\">UUID<\/span><span class=\"o\">.<\/span><span class=\"na\">fromString<\/span><span class=\"o\">(<\/span><span class=\"n\">id<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">cassandraTemplate<\/span><span class=\"o\">.<\/span><span class=\"na\">selectOneById<\/span><span class=\"o\">(<\/span><span class=\"n\">uuid<\/span><span class=\"o\">,<\/span> <span class=\"nc\">SignalTable<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">delete<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">id<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">NotFoundSignal<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"no\">UUID<\/span> <span class=\"n\">uuid<\/span> <span class=\"o\">=<\/span> <span class=\"no\">UUID<\/span><span class=\"o\">.<\/span><span class=\"na\">fromString<\/span><span class=\"o\">(<\/span><span class=\"n\">id<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"nc\">Boolean<\/span> <span class=\"n\">res<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cassandraTemplate<\/span><span class=\"o\">.<\/span><span class=\"na\">deleteById<\/span><span class=\"o\">(<\/span><span class=\"n\">uuid<\/span><span class=\"o\">,<\/span> <span class=\"nc\">SignalTable<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span><span class=\"o\">(!<\/span><span class=\"n\">res<\/span><span class=\"o\">)<\/span> <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">NotFoundSignal<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\u4fe1\u53f7\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\"<\/span><span class=\"o\">);<\/span>\r\n\r\n        <span class=\"k\">return<\/span> <span class=\"n\">id<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n<span class=\"o\">}<\/span>\r\n\r\n<\/code><\/pre>\n<h2>\u8de8\u57df\u8d44\u6e90\u5171\u4eab\uff08CORS\uff09\u5bf9\u7b56<\/h2>\n<p>\u4ece\u672c\u5730\u524d\u7aef\u8c03\u7528\u672c\u5730\u72ec\u7acb\u8bbe\u7f6e\u7684\u670d\u52a1\u5668\u65f6\u51fa\u73b0\u4e86\u4ee5\u4e0b\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>The value of the 'Access-Control-Allow-Credentials' header in the response is '' which must be 'true' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u7ed9controller\u7c7b\u6dfb\u52a0CrossOrigin\u6ce8\u89e3\uff0c\u6211\u4eec\u6210\u529f\u907f\u514d\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5141\u8bb8\u6240\u6709\u8bbf\u95ee\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nd\">@RestController<\/span>\r\n<span class=\"nd\">@CrossOrigin<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">SignalController<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nd\">@Autowired<\/span>\r\n    <span class=\"nc\">SignalService<\/span> <span class=\"n\">signalService<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"nd\">@Autowired<\/span>\r\n    <span class=\"nc\">CassandraService<\/span> <span class=\"n\">cassandraService<\/span><span class=\"o\">;<\/span>\r\n\r\n    <span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/signal\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"nc\">Signal<\/span> <span class=\"nf\">getSignal<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">signalService<\/span><span class=\"o\">.<\/span><span class=\"na\">fetchSignal<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"nd\">@PostMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/signal\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"nc\">Signal<\/span> <span class=\"nf\">sendSignal<\/span><span class=\"o\">(<\/span><span class=\"nd\">@RequestBody<\/span> <span class=\"nc\">SendSignal<\/span> <span class=\"n\">sendSignal<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">Signal<\/span> <span class=\"n\">signal<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cassandraService<\/span><span class=\"o\">.<\/span><span class=\"na\">select<\/span><span class=\"o\">(<\/span><span class=\"n\">sendSignal<\/span><span class=\"o\">.<\/span><span class=\"na\">getId<\/span><span class=\"o\">()).<\/span><span class=\"na\">getSignal<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">signalService<\/span><span class=\"o\">.<\/span><span class=\"na\">sendSignal<\/span><span class=\"o\">(<\/span><span class=\"n\">signal<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"nd\">@PostMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/signal\/{name}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"nc\">SignalTable<\/span>  <span class=\"nf\">postSignal<\/span><span class=\"o\">(<\/span><span class=\"nd\">@RequestBody<\/span> <span class=\"nc\">Signal<\/span> <span class=\"n\">signal<\/span><span class=\"o\">,<\/span> <span class=\"nd\">@PathVariable<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">name<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span><span class=\"k\">return<\/span> <span class=\"n\">cassandraService<\/span><span class=\"o\">.<\/span><span class=\"na\">insert<\/span><span class=\"o\">(<\/span><span class=\"n\">signal<\/span><span class=\"o\">,<\/span> <span class=\"n\">name<\/span><span class=\"o\">);}<\/span>\r\n\r\n    <span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/all-signal\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">SignalTable<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">getAllSignal<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span> <span class=\"k\">return<\/span> <span class=\"n\">cassandraService<\/span><span class=\"o\">.<\/span><span class=\"na\">selectAll<\/span><span class=\"o\">();}<\/span>\r\n\r\n    <span class=\"nd\">@DeleteMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/signal\/{id}\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"nc\">SimpleResponse<\/span> <span class=\"nf\">deleteSignal<\/span><span class=\"o\">(<\/span><span class=\"nd\">@PathVariable<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">id<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">NotFoundSignal<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">id<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">cassandraService<\/span><span class=\"o\">.<\/span><span class=\"na\">delete<\/span><span class=\"o\">(<\/span><span class=\"n\">id<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">SimpleResponse<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\u524a\u9664\u6210\u529f\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h1>\u524d\u7aef<\/h1>\n<p>\u5b9e\u73b0\u4e00\u4e2a\u529f\u80fd\uff0c\u7528React.js\u8c03\u7528\u4e0a\u8ff0\u7684API\u3002\u524d\u7aef\u8bbe\u8ba1\u5f88\u7b80\u5355\uff0c\u7701\u7565\u4e86\u6e90\u4ee3\u7801\u7b49\u8be6\u7ec6\u4fe1\u606f\u3002<\/p>\n<h2>\u753b\u9762\u5217\u8868<\/h2>\n<h3>\u5bb6 (ji\u0101)<\/h3>\n<p>\u5728\u753b\u9762\u663e\u793a\u65f6\uff0c\u8c03\u7528\u4fe1\u53f7\u5217\u8868\u83b7\u53d6\u7684API\u6765\u4ee5\u5217\u8868\u5f62\u5f0f\u663e\u793a\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8fc2913a08637a6da20f\/29-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2021-03-08 11.55.03.png\" \/><\/div>\n<h3>\u521b\u5efa<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8fc2913a08637a6da20f\/31-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2021-03-08 11.51.17.png\" \/><\/div>\n<h3>\u4eceiPhone\u4e0a\u7684\u8bbf\u95ee<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8fc2913a08637a6da20f\/33-1.png\" alt=\"IMG_6099.PNG\" \/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u7136\u9065\u63a7 \u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u667a\u80fd\u624b\u673a\u3001\u667a\u80fd\u97f3\u7bb1\u7b49\u8bbe\u5907\u63a7\u5236\u7535\u89c6\u3001\u7a7a\u8c03\u7b49\u7ea2\u5916\u7ebf\u64cd\u4f5c\u7684\u5bb6\u7535\u8bbe\u5907\uff0c\u540d\u4e3aNature Remo [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50179","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010spring-boot\u3011\u4f7f\u7528\u3010react\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684nature-remo\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo\" \/>\n<meta property=\"og:description\" content=\"\u81ea\u7136\u9065\u63a7 \u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u667a\u80fd\u624b\u673a\u3001\u667a\u80fd\u97f3\u7bb1\u7b49\u8bbe\u5907\u63a7\u5236\u7535\u89c6\u3001\u7a7a\u8c03\u7b49\u7ea2\u5916\u7ebf\u64cd\u4f5c\u7684\u5bb6\u7535\u8bbe\u5907\uff0c\u540d\u4e3aNature Remo [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010spring-boot\u3011\u4f7f\u7528\u3010react\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684nature-remo\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-07T07:48:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T05:03:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8fc2913a08637a6da20f\/29-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/\",\"name\":\"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-07T07:48:28+00:00\",\"dateModified\":\"2024-04-29T05:03:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010spring-boot\u3011\u4f7f\u7528\u3010react\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684nature-remo\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo","og_description":"\u81ea\u7136\u9065\u63a7 \u4e00\u79cd\u53ef\u4ee5\u901a\u8fc7\u667a\u80fd\u624b\u673a\u3001\u667a\u80fd\u97f3\u7bb1\u7b49\u8bbe\u5907\u63a7\u5236\u7535\u89c6\u3001\u7a7a\u8c03\u7b49\u7ea2\u5916\u7ebf\u64cd\u4f5c\u7684\u5bb6\u7535\u8bbe\u5907\uff0c\u540d\u4e3aNature Remo [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010spring-boot\u3011\u4f7f\u7528\u3010react\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684nature-remo\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-07T07:48:28+00:00","article_modified_time":"2024-04-29T05:03:36+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d8fc2913a08637a6da20f\/29-0.png"}],"author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/","name":"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-07T07:48:28+00:00","dateModified":"2024-04-29T05:03:36+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u3010Spring-boot\u3011\u4f7f\u7528\u3010React\u3011\u64cd\u4f5c\u672c\u5730\u73af\u5883\u7684Nature Remo"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90spring-boot%e3%80%91%e4%bd%bf%e7%94%a8%e3%80%90react%e3%80%91%e6%93%8d%e4%bd%9c%e6%9c%ac%e5%9c%b0%e7%8e%af%e5%a2%83%e7%9a%84nature-remo%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50179"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50179\/revisions"}],"predecessor-version":[{"id":85436,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50179\/revisions\/85436"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}